首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
算法
七七里
创建于2022-07-06
订阅专栏
.
暂无订阅
共21篇文章
创建于2022-07-06
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
小顶堆
Go 提供了 container/heap 这个包来实现堆的操作。堆实际上是一个树的结构,每个元素的值都是它的子树中最小的,因此根节点 index = 0 的值是最小的,即最小堆。 堆也是实现优先队列
算法-回溯集合
什么问题 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 排列问题:N个数按一定规则全排列,有几种排列方
算法-约瑟夫环
n个人围成一个圈,每隔m个杀一个人,最后一个活下来的人的编号是多少 从两个人的时候反推回去。.....
算法-滑动窗口
最小长度子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s =
算法-动态规划-子序列等问题
最长递增子序列 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序 if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1
算法-打家劫舍
基础款 确定dp数组(dp table)以及下标的含义 dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 。 即dp[i] = max(dp[i - 2] + nums[i]
背包问题
01背包:n种物品,每种物品只有1个 完全背包:n种物品,每种物品无限个 多重背包:n种物品,每种物品个数各不相同 01背包 dp数组 二维数组dp[i][j]:[0-i]之间的物品任取放进容量为j的
算法-分苹果
分析:放慢 + 没放满 放满的时候,把每个盘子里的一个苹果和盘子合二为一。f(m-n,n) 没放满的时候,此时把盘子减少一个,对结果没影响。fun(m,n)=fun(m,n-1);
相同的树/二叉树的所有路径/平衡二叉树/二叉树最大深度/前k个高频元素/重复字符串
相同的树 递归 二叉树的所有路径 递归--终止条件左右孩子为nil--中间操作s = s+strconv.Itoa(node.Val)+"->" 平衡二叉树 先求高度 二叉树最大深度 层序遍历 前k个
算法-kmp算法
前缀:aabaaf :a,aa,aab,aaba,aabaa 后缀:f,af,aaf,baaf,abaaf 最长相等前后缀:a-0 aa-1 aab-0 aaba-1 aabaa-2 aabaaf-0
算法-交通打印数字和字母
此方法是通过channl控制两个循环交替打印, 使用sync.WaitGroup方法来控制等待主进程,
四数之和/移除元素/删除有序数组中的重复项/移动零/比较含退格的字符串/反转字符串/替换空格/颠倒字符串中的单词/左旋/
四数之和 两个for循坏 带两个指针,注意四次去重。指针判断学会用for l < r 移除元素 也是双指针,快指针遍历数组,慢指针等待判断不等时,赋值 删除有序数组中的重复项 双指针,有序数组 指针判
两两交换链表中的节点/字符串相加
此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序.................
设计链表/螺旋矩阵/最小覆盖字串
使用双链表实现 二维切片 四个for循环 滑动窗口,need去判断是不是t元素...........
水果成篮/滑动/有序数组平方/长度最小的子数组/有效的完全平方/合并二叉树/链表中删去和为0的节点
题目要求:意思是每棵树代表一种类型,用fruit表示,你有两个篮子,每个篮子只能装一种类型的水果,必须连续采摘,选择从那棵树开始摘,你能摘到更多的树 //滑动窗口 二分法 //有序的时候用
最小栈/最多数/反转链二叉树/汉明距离/比特位计数/二叉树的直径
一个主栈,一个辅助栈 辅助栈的栈顶始终都是最小值。。每次pop一个值进来的时候,主栈直接加进去,辅助栈去比较栈顶元素,val小的话就加进去,不如栈顶小就再加一遍栈顶元素。总之住栈和辅助栈的元素个数相同
滑动窗口最大值/对称二叉树
//封装一个单调队列 //push的思路:如果窗口加入的值大于队列的back 也就是右侧左小值,那就把back删掉,直到等于小于或者队列长度为0,然后把这个值加进去 //pop的思路:就是看窗口移出去
两数相加-注意赋值
一定是给cur.next赋值 只有这样在下一步更新cur的时候在不为空...............
回文链表两种方法
``` func IsPalindrome(head *StrNode) bool { vals := []string{} for ; head != nil; head = head.next {
面经-快排,堆排序 稳定与否
原理:先取第一个数为分水岭。。判断v[i]与分水岭得大小,小于和head互换,i++,head++ 。大于和tail互换,tail--。最终得到小于分水岭+分水岭+大于分水岭得数组,再对左边递归,得到
下一页