首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
每日算法
linyv
创建于2022-11-29
订阅专栏
发现问题--->思考问题--->解决问题--->提升自我
暂无订阅
共126篇文章
创建于2022-11-29
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
最佳买卖股票时机含冷冻期——动态规划
动态规划 我们假设f[i]表示第i天结束后的累计最大收益,在这一天我们会有3种状态, 持有股票——我们记为f[i][0] 不持有股票且冻结——我们记为f[i][1] 不持有股票但不冻结——我们记为f[
最长递归子序列——动态规划
方法 ans维护当前最长子序列长度 dp维护当前各个长度子序列的最大值(如长度为1的最大值,为2,为3的,一直到长度为ans的) 外层for遍历 如果dp[ans] > nums[i]那么我们要考虑当
最大正方形——动态规划
代码1: 第一个两层for,分配空间的同时初始化dp maxside维护当前最大正方形的边长 第二个两层for,一步一步从小问题推往大问题,动态规划步骤 代码2: 代码2没有在初始化的同时扩容,并且没
乘积最大子数组——动态规划
步骤 ans维护目前的最大值,ma当前节点所在的子序列的目前的最大值,mi则是当前节点所在的子序列的目前的最小值, 所谓目前的最小值也就是不考虑当前节点之后的数字,因为遍历还没完成 为什么只考虑当前节
从前序与中序遍历序列构造二叉树——递归
代码 preorder [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ] inorder [ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ] 通过preord
单词搜索——回溯
代码 b1用来维护当前位置是否已经使用过 cur用来维护当前深度 4个if用来和不同方向的值比较 两个for循环来找到第一个值的位置
子集——DFS
方法 记录cur深度 每到一层后选择是否加上这个深度的值 每一层都只有两个选择,带上这个值去下一层或不带上 将两种选择都记录下来 在最深处加入ans
最小路径和——动态规划
方法-动态规划 因为非负,所以每一步只能往下走或往右走, 所以我们可以初始第一排和第一列的最小路径和 所以到达每一个位置的最小路径一定来自它左边格子和上边格子中最小路径和中偏小的那个 因为我们已经有了
合并区间——sort.Slice
方法 sort.Slice 进行排序,规则func为,比较切片的第一个元素,从小到大排序 排序之后将第一切片加入到ans中 for range ins,遍历 拿ans尾部切片的第一个元素与遍历的下一个
字母异位分组
代码1 排序加map 代码2 记录字母个数+map 代码1和代码2思想都是找到异位词的共同点,也就是通过某些运算,我们可以将异位词变为相同的key,从而利用map数据结构来将形同key的异位词记录到一
全排列——回溯算法
代码1: 代码1通过维护每次传入的nums不同从而维护其哪个被使用过,哪个没有, 代码2则是通过传入used——map结构从而记录维护 不用全局变量的代码1 代码2 nums原数组,path走的路线,
下一个排列——字典序
方法1(两遍for循环) : 第一遍for循环,从后往前找到第一个非增序的元素i, 第二遍for循环,从后往前找到第一个比i大的元素j 交换位置 将i之后的元素升序排列,不包括i 可以直接反转无序升序
寻找重复数——算法的体现
1. 我们把(1-12)12个数放在了13个框里,也就是我们最终零号位置填入一个数,也就是重复的那个数,如果我们填入的那个数小于等于6,那么小于等于mid的数由原来的6个数变成了7个数,(如果填入的数
探索二维矩阵(单调性扫描)——Z字形搜索
方法1 遍历: 方法2 二分查找: 方法3 Z字形搜索: 选中右上角的数,如果这个数小了就往下移一格,如果大了就往左移一格 图解:
和为k的子数组——哈希+前缀和
方法1(枚举) : 两层for循环,第一层确定初始位置,第二层确定结束位置,枚举答案 方法2(哈希+前缀和): 哈希的键值对为 {sum:sum出现的次数} 一层for循环,for循环的途中记录sum
每日温度——单调栈
(单调栈即站内元素维护的时候,满足单调递增或单调递减) 方法1,单调栈: 答案长度已知,所以创建返回值ans时,用make直接把长度和容量取好 创建一个stack(用来存储元素的下标) 遍历tempe
三数之和——排序+双指针
方法1: 因为不能包含重复三元组,所以先排序,这样更容易去重 排序过后遍历第一个数,并保证从第二遍开始与上一次的值不相同,从而起到去重的目的 在遍历第一个数的时候,因为已经确定了一个值,所以问题就从刚
盛最多水的容器——双指针
双指针 创建两个指针(l,r)指向数组的首和尾, for循环,退出条件(l>r) 比较l和r的高度,每次移动低的那一个指针 每次移动完,维护一下最优解 for循环结束,输出最优解
找到数组中消失的数字——数组
在原数组中修改 因为我们是通过增加n来修改数据,所以被修改位置的数据依然可以通过取模还原出来,不会丢失数据, 所以在遍历一遍后,没有被增加的位置(值小于n的位置)的下标加1就是未包含的数据
合并k个升序链表——分治法
分治法核心两两相加,这个可以用递归实现 1. merge函数将k个链表从中间分开, 2. 需要参数 lists,l(起始位置),r(最终位置) 3. (l+r)/2 得到中间位置mid 4. 递归到
下一页