欢迎光临散文网 会员登陆 & 注册

二分二段性/滑动窗口/二叉树

2022-05-20 17:12 作者:剑离我离  | 我要投稿

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/

不能在原来节点的基础上直接进行交换,要重新建立新的节点;而建立新的节点,不能前序进行建立,因为前序并不知道之后节点的情况,而翻转的创建的时候,应要包含子树;否则,子树并没有跟着根节点一起翻转;

对称的二叉树

题解


二分二段性/滑动窗口/二叉树的评论 (共 条)

分享到微博请遵守国家法律