📜  最短无序子数组的 Javascript 程序(1)

📅  最后修改于: 2023-12-03 15:26:28.098000             🧑  作者: Mango

最短无序子数组的 Javascript 程序

在排序数组的情况下,最短无序子数组是指从原数组中选出一个最小的子数组,使其在排序后能够使整个数组有序。

以下是一个用 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;
}

这个函数使用了两个指针 startend 分别表示无序子数组的起始和终止位置,同时使用两个变量 minmax 分别表示当前子数组的最大值和最小值。

首先,我们遍历一遍数组,找到当前子数组的最大值和最小值。然后,如果当前元素小于 max,说明该元素不在正确的位置,需要将其包含在到子数组中,因此将 end 更新为 i。同理,如果当前元素大于 min,说明该元素也需要包含在子数组中,因此将 start 更新为 n-1-i。最后,返回 end - start + 1,即为无序子数组的长度。

在数组长度为 n 的情况下,该算法的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。

参考链接: