用户工具

站点工具


算法题型分类

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
算法题型分类 [2020/10/31 20:50] – [搜索] plough算法题型分类 [2020/11/06 02:29] (当前版本) – [搜索] plough
行 66: 行 66:
 |Backtracing||| |Backtracing|||
 |17|数字键盘组合|sb.deleteCharAt(pos)| |17|数字键盘组合|sb.deleteCharAt(pos)|
-|93|IP 地址划分|| +|93|IP 地址划分|转换为树形问题,剪枝
-|79|在矩阵中寻找字符串|| +|79|在矩阵中寻找字符串|终止条件用 word.length() == 1
-|257|输出二叉树中所有从根到叶子的路径|| +|257|输出二叉树中所有从根到叶子的路径|add和remove成对出现;if (root == null) return;
-|46|排列|| +|46|排列|提前声明一个 visited 数组
-|47|含有相同元素求排列||+|47|含有相同元素求排列|先排序,然后在添加一个元素时,判断这个元素是否等于前一个元素,如果等于,并且前一个元素还未访问,那么就跳过这个元素|
 |77|组合|| |77|组合||
 |39|组合求和|| |39|组合求和||
行 78: 行 78:
 |90|含有相同元素求子集|| |90|含有相同元素求子集||
 |131|分割字符串使得每个部分都是回文数|| |131|分割字符串使得每个部分都是回文数||
-|37|数独||+|37|数独|seeNext|
 |51|N皇后|| |51|N皇后||
  
行 154: 行 154:
 ==== 链表 ==== ==== 链表 ====
 ^ leetcode序号      ^ 题目       ^ 思路要点 ^ ^ leetcode序号      ^ 题目       ^ 思路要点 ^
-|160|找出两个链表的交点|| +|160|找出两个链表的交点|如果不存在交点,l1 和 l2 会同时为 null,从而退出循环。
-|206|链表反转|| +|206|链表反转|pre,cur,next;pre = null
-|21|归并两个有序的链表|| +|21|归并两个有序的链表|归并排序
-|83|从有序链表中删除重复节点|| +|83|从有序链表中删除重复节点|
-|19|删除链表的倒数第n个节点|| +|19|删除链表的倒数第n个节点|双指针
-|24|交换链表中的相邻节点|| +|24|交换链表中的相邻节点|pre,cur,next; pre = dummyHead
-|445|链表求和|| +|445|链表求和|用栈倒序
-|234|回文链表|| +|234|回文链表|快慢指针切成两半,把后面的反转
-|725|分隔链表|| +|725|分隔链表|如果链表有N 个结点,则分隔的链表中每个部分中都有n/k 个结点,且前N%k 部分有一个额外的结点。
-|328|链表元素按奇偶聚集||+|328|链表元素按奇偶聚集|分割奇偶链;找到奇数链的尾部;连接两条链|
  
 ==== 树 ==== ==== 树 ====
 ^ leetcode序号      ^ 题目       ^ 思路要点 ^ ^ leetcode序号      ^ 题目       ^ 思路要点 ^
 |递归||| |递归|||
-|104|树的高度|| +|104|树的高度|Math.max(leftDepth, rightDepth) + 1
-|110|平衡树|| +|110|平衡树|还是求最大深度,多了一次比较和状态记录
-|543|两节点的最长路径|| +|543|两节点的最长路径|等于两子树的最大深度之和
-|226|反转树|| +|226|反转树|反转左右子树;交换位置
-|617|归并两棵树|| +|617|归并两棵树|
-|112|判断路径和是否等于一个数|| +|112|判断路径和是否等于一个数|
-|437|统计路径和等于一个数的路径数量|| +|437|统计路径和等于一个数的路径数量|pathSumStartsWithRoot(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum)
-|572|子树|| +|572|子树|<code>isSubtreeStartsWithRoot(s, t) || isSubtree(s.left, t) || isSubtree(s.right, t)</code>注意子树的定义
-|101|树的对称|| +|101|树的对称|isMirror(root.left, root.right)
-|111|最小路径|| +|111|最小路径|当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度;当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值
-|404|统计左叶子节点的和||+|404|统计左叶子节点的和||
 |687|相同节点值的最大路径长度|| |687|相同节点值的最大路径长度||
 |337|间隔遍历|| |337|间隔遍历||
行 206: 行 206:
 ==== 栈和队列 ==== ==== 栈和队列 ====
 ^ leetcode序号      ^ 题目       ^ 思路要点 ^ ^ leetcode序号      ^ 题目       ^ 思路要点 ^
-|232|用栈实现队列|| +|232|用栈实现队列|当 sOut 空的时候,一次性把 sIn 加到 sOut 上
-|225|用队列实现栈|| +|225|用队列实现栈|两个队列;push 的时候,把元素插入临时队列的前面,然后把主队列一一插过去;交换两个队列的名字
-|155|最小值栈|| +|155|最小值栈|多使用一个minStack,同步更新
-|20|用栈实现括号匹配|| +|20|用栈实现括号匹配|左括号入栈,右括号出栈
-|739|数组中元素与下一个比它大的元素之间的距离|| +|739|数组中元素与下一个比它大的元素之间的距离|一次遍历。用栈记录已经遇到的索引,一旦遇到更大的值,就持续出栈,计算结果
-|503|循环数组中比当前元素大的下一个元素||+|503|循环数组中比当前元素大的下一个元素|int i = 0; i < n * 2; i++。只在 i<n 时入栈|
  
 ==== 哈希表 ==== ==== 哈希表 ====
 ^ leetcode序号      ^ 题目       ^ 思路要点 ^ ^ leetcode序号      ^ 题目       ^ 思路要点 ^
-|1|数组中两个数的和为给定值|| +|1|数组中两个数的和为给定值|<needNum:currentIndex>
-|217|判断数组是否含有重复元素|| +|217|判断数组是否含有重复元素|多种算法,略
-|594|最长和谐序列|| +|594|最长和谐序列|构造freqMap,遍历此map
-|128|最长连续序列||+|128|最长连续序列|<num, length>;forward 递归计算从每个num出发的length|
  
 ==== 字符串 ==== ==== 字符串 ====
算法题型分类.1604148642.txt.gz · 最后更改: 2020/10/31 20:50 由 plough

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki