581. 最短无序连续子数组
image.png
解法
public int findUnsortedSubarray(int[] nums) {
// 求中间一段的左右边界,左边界是,从右往左遍历,最后一个大于最小值的位置,
// 因为左边都是小于右边所有值的
// 右边界是,从左往后遍历,最后一个小于最大值的位置
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int n = nums.length;
int left = 0;
int right = -1;
for (int i = 0; i < n; i++) {
// 右边界是,从左往后遍历,最后一个小于最大值的位置
if (max > nums[i]) {
right = i;
} else {
max = nums[i];
}
// 左边界是,从右往左遍历,最后一个大于最小值的位置
if (min < nums[n - 1 - i]) {
left = n - 1 - i;
} else {
min = nums[n - 1 - i];
}
}
return right == -1 ? 0 : right - left + 1;
}
本文标题:581. 最短无序连续子数组
本文链接:https://www.haomeiwen.com/subject/mnglaltx.html
网友评论