[LeetCode]581. Shortest Unsorted Continuous Subarray

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;
    }
}




你可能感兴趣的:(LeetCode)