leetcode刷题总结401-450
401. 二进制手表
描述:
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
思路:递归回溯法。
402. 移掉K位数字
描述:
思路:维护一个栈。来一个数入栈,当栈顶元素大于准备进栈的,那么弹出栈顶。
403. 青蛙过河
描述:
思路:动态规划。维护一个map<石头的下表,当前可以跳的步数>
406. 根据身高重建队列
描述:
思路:贪心算法。当两个身高相同,拿第二个座标判断。当身高不同,小个在后。然后把这个数组进行插入排序,把第二个坐标作为下表插入list。
407. 接雨水 II
描述:
思路:从外围往里进。遇到低于自己的开始计算。
410. 分割数组的最大值
描述:
思路: 动态规划即可。dp[nums.leng][m]。复杂度O(n*n*m);;;二分。【最大的数,所有数之和】进行mid计算。mid就是我们划分的输出,如果按照输出划分出来的个数小于m,证明我们划分的太大了,需要缩小值,那么right=mid-1,继续划分。知道left=<right。返回left即可。
413. 等差数列划分
描述:
思路:动态规划。具有重叠子问题。定dp[i]为结尾i的子序列个数。状态转移dp[i]=dp[i-1]+1如果公差相等。用一个result去累加每个dp。
416. 分割等和子集
描述:
思路:计算总和。target=sum/2。如果sum%2=1直接false。动态规划。如果数组中的某些数字能够使target等于这些,那么就可以。
417. 太平洋大西洋水流问题
描述:
思路:递归DFS。
421. 数组中两个数的最大异或值
描述:
思路:将这些数字用二进制标志。然后从高位到低位用前缀树存储。异或要求不同才能为1.然后从根节点进行找分叉点。
423. 从英文中重建数字
描述:
思路:可以通过统计完成。zero。 出现z为0.
424. 替换后的最长重复字符
描述:
思路:滑动窗口。初始1,逐渐增大,然后往后移。容忍k个不同。
430. 扁平化多级双向链表
描述:
思路:栈。先判断child是否为空,空就继续往后走。逐渐压栈。输出。
435. 无重叠区间
描述:
思路:按照第二维度进行排序。(贪心,最早结束越好。)
438. 找到字符串中所有字母异位词
描述:
思路:滑动窗口+hashmap.
440. 字典序的第K小数字
描述:
思路:通过前缀树的思路。记录每个节点的所有子节点个数。
442. 数组中重复的数据
描述:
思路:遇到一个数字,对index=这个数字的数字加n,然后遍历完后哪个位置>2n,就证明出现两次。
443. 压缩字符串
描述:
思路:双指针。
445. 两数相加 II
描述:
思路:反转;;;栈。
446. 等差数列划分 II - 子序列
描述:
思路:动态规划。dp[i下表][d公差]的个数。状态转移是每个dp[i]下的每个公差计数。(放弃)
447. 回旋镖的数量
描述:
思路:对于每个节点统计对于其他节点的距离。
448. 找到所有数组中消失的数字
描述:
思路:遇到一个数字,对index=这个数字的数字加n,然后遍历完后哪个位置<n,就证明没有出现。
450. 删除二叉搜索树中的节点
思路:删除节点的左子树的最右下节点////右子树的最坐下节点。