首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
每日算法
linyv
创建于2022-11-29
订阅专栏
发现问题--->思考问题--->解决问题--->提升自我
暂无订阅
共126篇文章
创建于2022-11-29
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
乘积小于 k 的子数组——滑动窗口
连续子数组的个数 代码: 核心代码:ans += j - i + 1 prod 存储乘积,i 为乘积数组的左端点,j 为乘积数组的右端点 第一层 for 循环右端点右移,内存 for 保证乘积小于 k
单词长度的最大乘积——位运算
代码1: 1 << (ch - 'a') 这里的位运算通过 1 左移来记录当前位所代表的字母是否存在,并且连续或运算所最终得到当前单词中所有的字符存在情况 从而得到每个单词的二进制表示形式,两个单词进
只出现一次的数字
方法1 : map 存储,判断 方法2: 代码: 解析方法1 : map 存储,判断 方法2: 代码: 解析
前 n 个数字二进制中 1 的个数 —— 位运算
代码1 : go 自带的 api 代码2 : 让 n 与 (n-1) 进行与运算,每一次运算可以将最后一个 1 转为 0,故而运算的个数即 1 的个数 代码3: 动态规划,最高有效位 代码4: 最低有
二进制加法——模拟
代码: Go string函数与strconv.Itoa函数的区别 strconv.Itoa 会将对应的整型数字转换成对应的字符串类型的数字 string 则是将整型数字转换为ASCII 值等于改数字
二进制求和
代码 1 模拟: ans 答案字符串,可以直接加运算 carry 储存当前值,carry 对 2 取余达到当前值, 除 2 得到其进位值 strconv.Itoa使 int 转 字符串,然后直接加 a
最少侧跳次数——动态规划
代码 动态规划: d := [3]int 表示当前节点的各个跑道最少需要侧跳几次 而当前节点的各个跑道动态转移只需要由上一个节点的各个跑道转移即可 最后返回三个值的最小值
寻找右区间——二分
代码 1 二分: 在原来的数组上,每个元素再加一个值,由此来记录每个元素之前的下标是什么 因为我们 ans 是原数组的下标对应关系 这样我们即使排序了,也依然不用担心下标丢失
计算右侧小于当前元素的个数——超时
超时代码: 在已知下标的情况下,在切片中删除这个元素,竟然需要 O(n) 的时间复杂度,所以直接导致代码超时,,
完全二叉树的节点个数——二分
代码 二分: 通过判断 bits&k 的结果得到每一层是向右还是向左 然后bits >>= 1 去判断下一层的方向 直到 bit == 0 或 node == nil, 也就是到达最后一层,也就是我们
长度最小的子数组
代码 1 暴力: 代码 2 前缀和+二分: 使用构造的前缀和从而达到查找第二个 for 循环中的要求时,节省时间 代码 3 滑动窗口: 维护一个start, end , end一直右移,直到 sum
寻找峰值——二分
代码: get 函数方便处理下标越界情况 因为相邻元素不相同,所以根据相邻元素的比较从而做出判断 我们总是走向更大的那个元素,更大的元素那边一定存在峰值,而更小的元素那边一定存在,谷底
寻找旋转排序数组中的最小值 || —— 二分
代码: 与昨天唯一不同的是,存在重复元素,所以二分的时候我们要考虑 mid 值与 high 相等的情况,如果相等,那么我们将无法判断 mid 是在最小值的左还是右,但有一点可以肯定,那就是,现在的 h
寻找旋转数组中的最小值——二分
代码 二分: 中间值如果比 nums[high] 大,则最小值,一定在中值与 high 之间,且最小值不可能是现在的中值,所以 low = mid + 1 如果小,则一定在 low 与中值之间,且最小
探索二维矩阵——二分
代码 1 两次二分: sort.Search(n int, f func(int) bool), 会返回[0,n)中最小满足条件的值,如果没有,则返回 n sort.SearchInts, 返回在数组
有效三角形的个数——贪心
代码 1 排序 + 二分: sort.SearchInts(a []int, b int) SearchInts在递增顺序的a中搜索x,返回x的索引。如果查找不到,返回值是x应该插入a的位置(以保证a
超级洗衣机——贪心
代码 贪心: abs 绝对值函数 max 最大值函数 num 记录当前元素需要移动多少次,无论取出还是放入 sum 记录目前位置需要移动多少次,取出和放入相互抵消, ans 维护最大值,最大值产生的情
无重叠区间——贪心
代码 1 动态规划: 按照第一个元素的值,升序排序 dp【i】 表示前 i+1 个元素可以分成多少段 代码 2 贪心: 得到最多的不重复字段数,最后用 n 减去自己得到的那个数即可
分割数组的最大值—— 贪心 ,动态规划
代码 1 动态规划: 动态转移方程 f[j][j] 表示前 i 个数分割为 j 段所能得到的最大连续子数组和的最小值 sub[i] 表示前 i 个数的和,以此来得到一段字段的和 代码 2 二分 + 贪
移掉 k 位数字——贪心+单调栈
代码 1 贪心: stack 维护单调递增栈,但维护的次数仅限 k 次, for 循环结束后,如果 k 还不为 0 ,则直接从队尾截掉 k 个元素即可 最后把左边的 0 给去掉 且处理一个特殊情况,即
下一页