https://leetcode.com/problems/shortest-unsorted-continuous-subarray/#/description
找到最短连续子数组,将这个子数组排序之后整个数组就有序了。求最短子数组长度
从左往右遍历的话,如果有序的话当前位置一定是已经遍历到的最大值位置;从右往左遍历的话,当前位置一定是已经遍历到的最小值位置。如果不是就要记录下beg和end。
另外初始赋值beg和end也很巧妙,保证如果完全有序的话返回0。如果不是完全有序的话必定beg和end都会被更新。
public class Solution {
public int findUnsortedSubarray(int[] nums) {
int len = nums.length;
int max = nums[0];
int min = nums[len - 1];
int beg = -1;
int end = -2;
for (int i = 1; i < len; i++) {
max = Math.max(max, nums[i]);
min = Math.min(min, nums[len - i - 1]);
if (max > nums[i]) {
end = i;
}
if (min < nums[len - i - 1]) {
beg = len - i - 1;
}
}
return end - beg + 1;
}
}