二分二段性/滑动窗口/二叉树
154 寻找旋转排序数组中的最小值 II
二分本质上是二段性,而有重复元素的情况下,二段性就被破坏了,要恢复二段性;
因此,可以去掉,头和尾中【相同】的元素,来达到去除不满足的情况;
class Solution {
public int findMin(int[] nums) {
int n = nums.length;
int l = 0, r = n - 1;
while (l < r && nums[0] == nums[r]) r--; // 恢复二段性
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] >= nums[0]) {
l = mid;// 这样写保证了找到的是最右边的数
} else {
r = mid - 1;
}
}
return r + 1 < n ? nums[r + 1] : nums[0];
// 如果r+1 > n ,说明没找到,原数组就是自然排列的,因此,第一个数就是最小的
}
}
1438 绝对差不超过限制的最长连续子数组
双指针
滑动窗口+双指针
三叶题解分析:https://leetcode.cn/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/solution/xiang-jie-er-fen-hua-dong-chuang-kou-dan-41g1/
二叉树对称问题
二叉树的镜像
https://leetcode.cn/problems/er-cha-shu-de-jing-xiang-lcof/
不能在原来节点的基础上直接进行交换,要重新建立新的节点;而建立新的节点,不能前序进行建立,因为前序并不知道之后节点的情况,而翻转的创建的时候,应要包含子树;否则,子树并没有跟着根节点一起翻转;
对称的二叉树
题解
