一:解题思路
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); } }
原文:https://www.cnblogs.com/repinkply/p/12692872.html