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變數。
因此,程式碼的空間複雜度是常數,而時間複雜度是線性。
結論
我們可以看到這個問題有多麼簡單。為了處理任何困難,我們將不得不進行邏輯思考並遵循某些步驟。我們已經看到了三種不同的輸出,使用了不同的輸入陣列。時間複雜度和空間複雜度是用來評估演算法效率的兩個指標。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP