get+二分|数位dp

lc1088

dfs从0开始生成由0、1、6、8、9组成的数

同时生成其翻转数,统计≤N且自身和翻转数不相等的数的数量

num 是当前生成的数

rev_num 是它的翻转数

base 是翻转数的位数权重(用来计算翻转数)

也可以直接套灵神模板写

class Solution {

public:

int ans = 0;

int N;

int digit[5]={0,1,6,8,9};

int rev_digit[5] = {0,1,9,8,6};

void dfs(int num,long rev_num,long base)

{

++if(num<=N){++

++if(num!=rev_num)++

ans++;

if(num>N/10)

return;

++for(int i =base==1?1:0;i<5;i++){++

++dfs(num*10+digit[i],rev_num+base*rev_digit[i],base*10);++

++}++

}

else

return;

}

int confusingNumberII(int N) {

this->N = N;

this->ans = 0;

dfs(0,0,1);

return ans;

}

};

lc2340

灵性等号

找最小数位置和最大数位置

算它们到两端的交换次数,若最小数在最大数右边就减1次重复操作,结果就是最少交换次数

class Solution {

/*

输入: nums = [3,4,5,5,3,1]

输出: 6

*/

public:

int minimumSwaps(vector<int>& nums)

{

int n=nums.size();

if(n==1) return 0;

int mn=0,mx=0;

for(int i=0;i<n;i++)

{

if(nums[i]<nums[mn])

mn=i;

if(nums[i]>=nums[mx])

mx=i;

}

int ret=mn+(n-1-mx);

++if(mn>mx) ret-=1;++

return ret;

}

};

lc2674

快慢指针

++while (f->next != list && f->next->next != list)++

得到的slow节点 中/偏前

ListNode* second = s->next;

// 后半 头节点

class Solution {

public:

vector<ListNode*> splitCircularLinkedList(ListNode* list)

{

vector<ListNode*> ret;

ListNode* s = list;

ListNode* f = list;

//f->next != list && f->next->next != list

++while (f->next != list && f->next->next != list)++

{

f = f->next->next;

s = s->next;

}

ListNode* second = s->next;

// 后半 头节点

s->next = list; // 前半 循环

ListNode* tail = second;

while (tail->next != list)

tail = tail->next;

tail->next = second;//后半 循环

return {list, second};

}

};

lc1428

逐行对每行链表用二分找首个1的列号

取所有行结果的最小列号,无1则返回-1。

class Solution {

public:

int leftMostColumnWithOne(BinaryMatrix &m) {

auto d = m.dimensions();

int r = d[0], c = d[1], res = -1;

auto bs = [&](int i, int r) {

int l = 0, k = -1;

while (l <= r)

{

int mid = l + ((r - l) >> 1);

++if (m.get(i, mid) == 0)++

l = mid + 1;

else

{

k = mid;

r = mid - 1;

}

}

return k;

};

for (int i = 0; i < r; i++) {

++int k = bs(i, c - 1);++

if (k >= 0) {

if (res == -1)

res = k;

else

res = min(res, k);

}

}

return res;

}

};

相关推荐
NAGNIP10 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱19 小时前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮1 天前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法