0
点赞
收藏
分享

微信扫一扫

最短无序连续子数组

小沙坨 2021-09-21 阅读 22
今日算法
题目描述:
示例 1:
示例 2:
示例 3:
题目分析:
  • 需要找到最短的无序子数组
  • 也就是找到最大的递增前缀数组和最大的递增后缀数组
  • 注意,如果数组长度是1,或者数据原本就是升序有序,应该返回0.
思路分析:
代码实现:
class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int len = nums.length - 1;
        if (len == 0) return 0;
        int[] arr = nums.clone();
        Arrays.sort(arr);
        boolean left = false; // 记录左边界
        boolean right = false; // 记录右边界
        int i = 0, j = len;
        for (; i <= j;) {
            if (arr[i] == nums[i]) {
                i++;
            } else {
                left = true; // 找到了左边界
            }
            if (arr[j] == nums[j]) {
                j--;
            } else {
                right = true; // 找到了右边界
            }
            if (left && right) {
                break; // 左右边界都找到,直接返回
            }
        }
        int result = j - i + 1;
        return result == -1 ? 0 : result; // 计算长度
    }
}
举报

相关推荐

0 条评论