📅  最后修改于: 2023-12-03 15:26:28.098000             🧑  作者: Mango
在排序数组的情况下,最短无序子数组是指从原数组中选出一个最小的子数组,使其在排序后能够使整个数组有序。
以下是一个用 Javascript 编写的最短无序子数组程序:
function findUnsortedSubarray(nums) {
let n = nums.length;
let start = -1;
let end = -2;
let min = nums[n-1];
let max = nums[0];
for (let i = 1; i < n; i++) {
max = Math.max(max, nums[i]);
min = Math.min(min, nums[n-1-i]);
if (nums[i] < max) {
end = i;
}
if (nums[n-1-i] > min) {
start = n-1-i;
}
}
return end - start + 1;
}
这个函数使用了两个指针 start
和 end
分别表示无序子数组的起始和终止位置,同时使用两个变量 min
和 max
分别表示当前子数组的最大值和最小值。
首先,我们遍历一遍数组,找到当前子数组的最大值和最小值。然后,如果当前元素小于 max
,说明该元素不在正确的位置,需要将其包含在到子数组中,因此将 end
更新为 i
。同理,如果当前元素大于 min
,说明该元素也需要包含在子数组中,因此将 start
更新为 n-1-i
。最后,返回 end - start + 1
,即为无序子数组的长度。
在数组长度为 n
的情况下,该算法的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。
参考链接: