leetcode-581. 最短无序连续子数组

 

leetcode-581. 最短无序连续子数组

 

class Solution {
public:
    int findUnsortedSubarray(vector<int>& nums) {

        // 笨方法,先排序,再从两端进行比较
        int i = 0;
        int j = nums.size()-1;
        vector<int> res(nums.size(), 0);
        for(int i = 0; i < nums.size(); i++)
            res[i] = nums[i];
        sort(res.begin(), res.end());


        while(i<nums.size()&&res[i]==nums[i])
            i++;
        while((j)>=0&&res[j]==nums[j])
            j--;
        if(i>=j)
        return 0;
        return j-i+1;
    }
};
class Solution {
public:
    int findUnsortedSubarray(vector<int>& nums) {

        // 从右到左:如果当前值的后面还有更小的值,不满足升序,当前值应该被排序
        // 从左到右:如果当前值的前面还有更大的值,不满足升序,当前值应该被排序
        int n = nums.size();
        int mn = nums[n-1], l = n;
        for (int i = n - 1; i >= 0; --i) {
            if (nums[i] > mn) {
                l = i;
                cout<<"l: "<<l<<endl;
            }
            mn = min(nums[i], mn);
        }
        int mx = nums[0], r = 0;
        for (int i = 0; i < n; ++i) {
            if (nums[i] < mx) {
                r = i;
                cout<<"r: "<<r<<endl;
            }
            mx = max(nums[i], mx);
        }
        return max(r - l + 1, 0);
    }
};

 

上一篇:初识面向对象


下一篇:LeetCode 581. 最短无序连续子数组