程序笔记   发布时间:2022-07-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了leetcode 最短无序连续子数组 中等大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

leetcode 最短无序连续子数组 中等

 

 

 

贪心:可以通过确定左右边界来获得答案。

确定左边界:如果一个下标 i,满足 nums[i] = min(nums[i], ... nums[n - 1]),那么这个 i 不然不在答案里,所以 ++ i 即可。

确定右边界:同理,如果一个下标 i,满足 nums[i] = max(nums[0], ... num[i]),那么这个 i 不然不在答案里,所以 -- i 即可。

所以可以有以下代码:

class Solution {
public:
    int findUnsortedSubarray(const vector<int>& nums) {
        if(nums.empty()) return 0;
        vector<int> minn(nums.size(), INT_MAX), maxx(nums.size(), INT_MIN);
        minn.BACk() = nums.BACk();
        maxx[0] = nums[0];
        for(int i = nums.size() - 2; i >= 0; -- i) {
            minn[i] = min(minn[i + 1], nums[i]);
        }
        for(int i = 1; i < nums.size(); ++ i) {
            maxx[i] = max(maxx[i - 1], nums[i]);
        }
        int l = 0, r = nums.size() - 1;
        while(l < nums.size() && nums[l] == minn[l]) {
            ++ l;
        }
        while(r >= 0 && nums[r] == maxx[r]) {
            -- r;
        }
        return r - l + 1 > 0 ? r - l + 1 : 0;
    }
};

 

然后其实可以不用到数组,即空间可以优化为 O(1)

拿获得左边界为例:从后往前记录当前的最小值,如果 nums[i] > minn 了,更新一下最左边界就行。

然后这样写有个注意的点####:retL 与 retR 的初始值要满足 retR - retL + 1 <= 0 才行,以避免 {1, 2, 3, 4} 这种,retL 与 retR 根本不会被更新

class Solution {
public:
    int findUnsortedSubarray(const vector<int>& nums) {
        if(nums.empty()) return 0;
        int l = nums.size() - 1, retL = 0;
        int minn = INT_MAX;
        while(l >= 0) {
            if(nums[l] > minn) {
                retL = l;
            }
            minn = min(minn, nums[l]);
            -- l;
        }
        int r = 0, retR = -1;
        int maxx = INT_MIN;
        while(r < nums.size()) {
            if(nums[r] < maxX) {
                retR = r;
            }
            maxx = max(maxx, nums[r]);
            ++ r;
        }
        return retR - retL + 1 > 0 ? retR - retL + 1 : 0;
    }
};

 

大佬总结

以上是大佬教程为你收集整理的leetcode 最短无序连续子数组 中等全部内容,希望文章能够帮你解决leetcode 最短无序连续子数组 中等所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。