首頁 >web前端 >js教程 >最短無序子數組的 JavaScript 程式最短無序子數組的 JavaScript 程序

最短無序子數組的 JavaScript 程式最短無序子數組的 JavaScript 程序

WBOY
WBOY轉載
2023-09-01 16:13:071086瀏覽

最短无序子数组的 JavaScript 程序最短无序子数组的 JavaScript 程序

問題陳述要求在整數陣列中找到最短的無序子陣列。換句話說,我們需要確定元素不按升序或降序排序的最小子數組。這個問題可以透過多種方法來解決,但在本文中,我們將討論使用 JavaScript 的簡單而有效的解決方案。

因此,首先我們將首先定義什麼是無序子數組,然後詳細理解問題陳述,然後繼續使用範例和程式碼片段解釋逐步解決方案。讀完本文後,您將清楚地了解如何在 JavaScript 中解決這個問題。那麼就讓我們開始吧!

什麼是無序子數組?

無序子數組是數組的連續子數組,其中元素不按升序或降序排列。換句話說,子數組中的元素不是按照遞增或遞減的順序排列的。

例如:[1, 2, 3, 5, 4, 6, 7] 是一個無序子陣列。

問題陳述

給定一個整數數組,我們需要找到最短的無序子數組。換句話說,我們需要找出元素不按升序或降序排序的最小子數組。

例如,讓我們考慮以下數組:const arr = [1, 2, 5, 4, 3, 6, 7]

在這種情況下,子陣列 [5, 4, 3] 是最短的無序子陣列。

現在讓我們來了解解決這個問題的演算法,然後我們開始使用 JavaScript 實作這個演算法。

最短無序子數組演算法

輸入 - n 個整數的陣列

輸出 - 無序的最短子數組的長度

第 1 步 - 初始化開始 = 0,結束 = n-1

STEP 2 - 從左到右遍歷陣列並找到第一個大於其右鄰居的元素。將其索引設為開始。

STEP 3 - 從右向左遍歷陣列並找到第一個小於其左鄰居的元素。將其索引設為結束。

第 4 步 - 從開始到結束尋找子數組中的最小和最大元素。

STEP 5 - 從 0 到 start-1 遍歷數組,找到第一個大於步驟 4 中找到的最小元素的元素的索引。將其索引設為左側。

STEP 6 - 從 end 1 到 n-1 遍歷數組,找出第一個小於步驟 4 中找到的最大元素的元素的索引。將其索引設為右側.

第 7 步 - 最短無序子數組的長度為(右 - 左 1)。

範例

在下面的範例中,我們首先透過從開頭和結尾迭代數組分別找到無序子數組的起始和結束索引。然後我們找到子數組中的最小和最大元素,然後分別從頭和尾遍歷數組來找到子數組的左索引和右索引。

最後,我們透過左索引減去右索引並加 1 來傳回最短無序子數組的長度。

function shortestUnorderedSubarray(arr) {
   let n = arr.length;
   let start = 0, end = n - 1;
   // find start index
   for (let i = 0; i < n - 1; i++) {
      if (arr[i] > arr[i + 1]) {
         start = i;
         break;
      }
   }
   // find end index
   for (let i = n - 1; i > 0; i--) {
      if (arr[i] < arr[i - 1]) {
         end = i;
         break;
      }
   }
   // find min and max element in subarray
   let min = arr[start], max = arr[start];
   for (let i = start + 1; i <= end; i++) {
      if (arr[i] < min) {
         min = arr[i];
      }
      if (arr[i] > max) {
         max = arr[i];
      }
   }
   // find left index
   let left = 0;
   for (let i = 0; i <= start; i++) {
      if (arr[i] > min) {
         left = i;
         break;
      }
   }
   // find right index
   let right = n - 1;
   for (let i = n - 1; i >= end; i--) {
      if (arr[i] < max) {
         right = i;
         break;
      }
   }
   // return length of shortest un-ordered subarray
   return right - left + 1;
}
// Example usage:
const arr = [1, 2, 5, 4, 3, 6, 7]
console.log("Array:", JSON.stringify(arr))
const len = shortestUnorderedSubarray(arr)
console.log("The length shortest un-ordered subarray: ", len);
// Output: 3, as [5, 4, 3] is the shortest un-ordered subarray with length 3.

結論

我們討論如何使用 JavaScript 執行最短無序子數組問題的每一個細微差別。我們希望透過本文,人們可以輕鬆找到並修復程式碼中與無序子數組相關的問題。

以上是最短無序子數組的 JavaScript 程式最短無序子數組的 JavaScript 程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除