首页 > 编程语言 > 详细

p120 需要排序的最短子数组(leetcode 581)

时间:2020-04-13 18:39:45      阅读:55      评论:0      收藏:0      [点我收藏+]

一:解题思路

Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    int findUnsortedSubarray(vector<int>& nums) 
    {
        if (nums.size() == 0) return 0;
        int n = nums.size();
        int i = 0, j = nums.size() - 1;
        int maxValue =-2147483648;
        int minValue = 2147483647;
        while (i < n - 1 && nums[i + 1] >= nums[i]) i++;
        while (j > 0 && nums[j] >= nums[j - 1]) j--;

        for (int k = i; k <= j; k++)
        {
            maxValue = max(maxValue,nums[k]);
            minValue = min(minValue,nums[k]);
        }

        while (i >= 0 && nums[i] > minValue) i--;
        while (j < n && nums[j] < maxValue) j++;

        return max(j-i-1,0);
    }
};

Java:

class Solution {
        public int findUnsortedSubarray(int[] nums)
        {
               if(nums==null || nums.length==0) return 0;
               int i=0,j=nums.length-1;
               int n=nums.length;

               while(i< n-1 && nums[i+1]>=nums[i]) i++;
               while(j>0 && nums[j]>=nums[j-1]) j--;
               int min=Integer.MAX_VALUE;
               int max=Integer.MIN_VALUE;

               for(int k=i;k<=j;k++)
               {
                   min=Math.min(min,nums[k]);
                   max=Math.max(max,nums[k]);
               }

               while(i>=0 && nums[i]>min) i--;
               while (j<n && nums[j]<max) j++;

               return Math.max(j-i-1,0);
        }
    }

 

p120 需要排序的最短子数组(leetcode 581)

原文:https://www.cnblogs.com/repinkply/p/12692872.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!