lintcode1157. 最短无序连续子数组

给定一个整数数组,你需要找到一个连续子数组,如果你只按升序对这个子数组进行排序,那么整个数组也将按升序排序。
你需要找到最短的这样的子数组并输出它的长度。

样例
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你需要对[6, 4, 8, 10, 9]按升序排列从而整个数组也变为升序。
注意事项
输入的数组长度范围为[1, 10,000]。
输入的数组可能会包含重复元素,本题升序的含义为<=
class Solution {
public:
    /**
     * @param nums: an array
     * @return: the shortest subarray's length
     */
    int findUnsortedSubarray(vector<int> &nums) {
        // Write your code here
        vector<int> tmp=nums;
        sort(tmp.begin(),tmp.end());
        int min=nums.size();
        int max=0;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=tmp[i]) {min=i;break;}
        }
        for (int i = nums.size()-1; i >= 0; i--) {
            /* code */
            if(nums[i]!=tmp[i]) {max=i;break;}
        }
        if(max==0) return 0;
        else return (max-min+1);
    }
};
发布了369 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43981315/article/details/103989817
今日推荐