leetcode刷题总结651-700
652. 寻找重复的子树
描述:
思路:递归对以每个节点为根进行序列化,存储hahmap。当遍历到某个节点发现个数==2。添加。
654. 最大二叉树
描述:
思路:递归。找最大的树。将左边一半递归返回作为左子树。右边一半递归返回作为右子树。
655. 输出二叉树
描述:
思路:先递归找高度。然后定义一个矩阵,高度*(2^高度-1)然后开始填充。空为"",划分。
658. 找到 K 个最接近的元素
描述:
思路:二分,找到最接近这个数字的下表。然后从index-t-1~~index+t-1开始缩小范围。
659. 分割数组为连续子序列
描述:
思路:贪心。尽可能取最长的。
662. 二叉树最大宽度
描述:
思路:广度优先。维护一个left,每次开始一个新的高度,更新left.。然后出队列更新max_。插入队列的时候,要插入节点不为空的情况下,包含位置深度信息。
665. 非递减数列
描述:
思路:某个元素小于后面一个 continue。。当大于后面一个,需要判断后面一个和这个元素的前一个大小。然后修改。记录fix个数。fix>1 false;
4,2,3
-1,4,2,3
2,3,3,2,4
667. 优美的排列 II
描述:
思路:排序。k=1就是排序后
若n=8初始状态
1 2 3 4 5 6 7 8
k=1~~~~~~~~ | 1 2 3 4 5 6 7 8 (不翻转,直接返回)
k=2~~~~~~~~ 1 | 8 7 6 5 4 3 2
k=3~~~~~~~~ 1 8 | 2 3 4 5 6 7
k=4~~~~~~~~ 1 8 2 | 7 6 5 4 3
668. 乘法表中第k小的数
描述:
思路:二分。然后查找mid下满足小于Mid的个数 和k做对比,决定low=high right=high
669. 修剪二叉搜索树
描述:
思路:根节点小于L,只修建右子树。 如果在之间,递归。
670. 最大交换
描述:
思路:排序。然后从高位到地位找第一个不同。将其交换。(如果高位中出现了两次,换最低位的)
671. 二叉树中第二小的节点
描述:
思路:递归。注意此题有很多条件,这些条件保证根是最小的。然后遇到比根大的返回,左子树右子树返回的值取最小。
673. 最长递增子序列的个数
描述:
思路:动态规划。维护一个dp[i]表示当前前i下的最长子序列的长度。count[i]表示当前i下的最长子序列的个数。N^2.
678. 有效的括号字符串
描述:
思路:递归。每次维护一个count(表示左括号比右括号多余的个数)<0直接flase.分别对*的三种情况递归结果或。
680. 验证回文字符串 Ⅱ
描述:
思路:双指针。不一样的话,分情况改变左指针或者右指针。
686. 重复叠加字符串匹配
描述:
思路:终止长度即B.length + A.length * 2
687. 最长同值路径
描述:
思路:递归。如果根节点等于左子树 或者右子树,或者都等于进行讨论。当某一个节点位空,返回0.
688. “马”在棋盘上的概率
描述:
思路:递归。针对每一个情况,返回的它概率。当越界,直接0.最后相加除以8.
692. 前K个高频单词
描述:
思路:先统计次数,然后优先队列维护k个。设定优先队列排序的规则。
695. 岛屿的最大面积
描述:
思路:循环找1的位置,然后开始深度优先+visited.
696. 计数二进制子串
描述:
思路:统计groups.比如实例1就是2222.然后窗口找最小累加。
697. 数组的度
描述:
思路:先统计,然后双指针缩小范围。
698. 划分为k个相等的子集
描述:
思路:如果均分不能或者最大大于均分直接false/。然后递归回溯。控制循环的次序i,是否已经访问visired,tartget,current。k.。