JavaScript陣列中三個嚴格遞增的數字(連續或非連續)


此問題旨在利用JavaScript在陣列中查詢三個嚴格遞增的數字(連續或非連續)。

理解問題

在開始為給定問題編寫演算法和程式之前,我們將首先了解該問題背後的邏輯。

考慮一個包含一些隨機數字的陣列。JavaScript允許我們遍歷陣列並跟蹤最小值和次最小值,以查詢三個嚴格遞增的數字。

在這個演算法中,如果找到第三個值大於這兩個值,我們將找到三個嚴格遞增的整數。

演算法

步驟1 - 第一步,建立一個名為find3IncreasingNum的函式。此函式將檢查三個連續數字是否按遞增順序排列。

步驟2 - 第二步將定義兩個具有全域性作用域的變數,命名為Infinity。Infinity將定義全域性作用域的屬性。

步驟3 - 第三步定義一個for迴圈來迭代陣列中的所有專案或數字。

步驟4 - 下一步指定當前物件,將其初始化為陣列的第一個元素。然後將此當前值與接下來的數字進行比較,並檢查它是否大於或小於當前數字。

步驟5 - 現在我們已經逐個檢查了所有數字。並找到了解決方案。

步驟6 - 最後一步在呼叫函式後顯示輸出。

示例

// sample array to store numbers
function find3IncreasingNum(arr) {
  let first = Infinity;
  let second = Infinity;
  for (let i = 0; i < arr.length; i++) { 
    const current = arr[i];
    if (current <= first) {
      first = current;
    } else if (current <= second) {
      second = current;
    } else {
      return true; // found a triplet
    }
  }
  return false; // no triplet found
}
const arr = [10, 20, 30, 40, 50];
console.log(find3IncreasingNum(arr)); 
const arr2 = [50, 40, 30, 20, 10];
console.log(find3IncreasingNum(arr2));
const arr3 = [10, 50, 20, 40, 30];
console.log(find3IncreasingNum(arr3)); 

輸出

true
false
true

此程式碼定義了三個包含不同值的整數陣列,它們分別命名為'arr'、'arr2'和'arr3'。共有三種輸出:true、false和true。第一個true表示給定輸入陣列具有連續的整數,第二個輸出表示陣列中不存在連續數字,第三個輸出表示陣列中存在數字序列。

演算法

步驟1 - 建立一個包含n位數字的陣列。

步驟2 - 定義一個新的陣列並初始化為空。此陣列將儲存陣列中所有連續元素的子陣列。

步驟3 - 建立一個子陣列來儲存陣列的連續數字。

步驟4 - 為numArray建立一個for迴圈,直到陣列長度。

步驟5 - 現在將numArray中的所有連續專案推入subArray。

步驟6 - 檢查條件,如果連續專案之間的差值不等於1。然後將其推入newArray。

步驟7 - 現在顯示所有連續數字的組作為輸出。

示例

const numArray = [40,39,38,50,49,48,70,20]; 
// define a new array
const newArray = [];  
// subArray for consecutive group
var subArray = []; 

for(var i=0; i<numArray.length; i++) { 
  // Push new item to subArray
  subArray.push(numArray[i]); 
  
  // If next item is not consecutive, push subArray to newArray
  if(numArray[i] - numArray[i+1] != 1) { 
    newArray.push(subArray);
    subArray = [];
  }
}

console.log("Group of consecutive numbers")
console.log(newArray);

輸出

Group of consecutive numbers
[ [ 40, 39, 38 ], [ 50, 49, 48 ], [ 70 ], [ 20 ] ]

時間和空間複雜度

輸入陣列的長度n決定了函式“find3IncreasingNum()”的執行時間。這是因為它使用for迴圈遍歷整個陣列一次。對於陣列中的每個元素,還會執行固定數量的操作。

該函式佔用O(1)空間。這種複雜度是由這樣一個事實造成的:無論輸入陣列的大小如何,該函式都消耗固定數量的額外空間。為了跟蹤陣列的元件,它只是構造first、second和current變數。

因此,程式碼的空間複雜度是常數,而時間複雜度是線性。

結論

我們可以看到這個問題有多麼簡單。為了處理任何困難,我們將不得不進行邏輯思考並遵循某些步驟。我們已經看到了三種不同的輸出,使用了不同的輸入陣列。時間複雜度和空間複雜度是用來評估演算法效率的兩個指標。

更新於:2023年8月23日

310 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.