Bootstrap

经典算法思路整理

数组

一个简单的表格是这么创建的:

DescriptionSolution
数组重复数hashmap、排序、二分变形
0放到数组尾双指针、冒泡
集合交集哈希、排序
除自身以外数组的乘积乘积=当前数左边的乘积*当前数右边的乘积
搜索数字在有序数组插入位置二分
旋转数组查找两次二分
数组超过一半的数字/求众数hashmap、排序
从小到大输出N个丑数试除法、迭代
奇数位于偶数前快排思想
第k小的数快排划分数组
TopK、第K大的数全排序、局部排序、堆、快排思想
旋转数组三次旋转
斐波那契数列迭代、递归、剪枝递归、通项公式、矩阵快速幂
统计邻居状态neighbor函数、CNN卷积

字符串

DescriptionSolution
压缩字符串list辅助记录cnt
实现字典树、后缀树字典树
反转单词顺序字符串基本操作(StringBuilder)

数字

DescriptionSolution
n的平方根二分、牛顿法
数字的整数次方二分快速幂
3sum/3sum closet排序+双指针
剪绳子(给定和求最大积)分解为2和3
数字二进制中1的个数右移位运算

链表

DescriptionSolution
删除重复节点I / 删除重复节点II使用头节点,更新pre.next即可
反转链表使用头节点和辅助节点tmpNode=cur.next
删除链表倒数第N个节点使用头节点的快慢双指针
相交链表hashmap、双指针
环形链表hashmap、快慢双指针
链表中间节点快慢指针
合并两个有序链表向新链表添加较小的节点
链表重排序找中间节点、反转和合并的组合

二叉树

DescriptionSolution
二叉树非递归遍历前序中序后序
二叉树的最大/最小深度/路径和/路径和II层次遍历
之字层次遍历/层次打印二叉树双栈/双队列层次遍历
前中序重建二叉树递归
二叉搜索树第K个节点中序遍历
二叉树的直径后序遍历

排列组合

DescriptionSolution
电话号码字母组合/字母大小写全排列集合选择元素组合
子集/子集II每次复制当前res所有list,并添加新的元素扩张res
全排列/全排列II“见缝插数”

DP

DescriptionSolution
兑换最少的零钱完全最小背包
分割等和子集01最大背包
最长重复子数组dp[i][j]=dp[i+1][j+1]+1
最长连续递增序列dp[i]=dp[i-1]+1
最大子序列和/最大序列乘积dp[i]=num[i]+dp[i-1]
跳台阶/斐波那契数列dp[i] = dp[i-1]+dp[i-2]
按摩师/打家劫舍dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])

堆、栈、快排

DescriptionSolution
最小栈辅助最小栈
栈实现队列辅助栈
数据流的中位数大小堆
快速排序

其他

DescriptionSolution
矩形是否相交/矩形相交面积IoU相关
最小编辑距离NLP相关
统计邻居状态neighbor函数、CNN 卷积
使数组唯一的最小增量贪心
gcd/lcm/贝祖定理最大公约数、最小公倍数、二元一次方程解
数组最大公约数tmp=gcd(tmp,x)
腐烂的橘子、最远的海洋、机器人的运动范围BFS模板题
;