我的任務是撰寫一個接受數字陣列和目標數字的函式
我必須在陣列中找到兩個數字相加形成目標,然后將兩個數字的索引作為連音回傳,就像這樣 (index1, index2)。
我創建了一個嵌套的 for 回圈來將陣列的每個元素與其他元素進行比較,然后運行 ??if 陳述句以在達到目標值時回傳索引。
但是,有些東西不起作用。我不確定如何以連音形式回傳,或者我獲取索引的代碼可能是錯誤的。任何幫助或提示將不勝感激。謝謝
function twoSum(numbers, target) {
for (let i = 0; i < numbers.length; i ) {
for (let j = 0; j < numbers.length; j ) {
if (numbers[i] numbers[j] === target) {
return [numbers.indexOf(i), numbers.indexOf(j)];
}
}
}
}
uj5u.com熱心網友回復:
Array#indexOf() 回傳傳遞給方法的值的位置。所以[1,2,3].indexOf(2)會回來1。[numbers.indexOf(i), numbers.indexOf(j)]將為您提供計數器變數i和j陣列中當前值的位置。如果該值不在陣列中,例如[1,2,3].indexOf(0),該方法將回傳-1。
您要回傳的索引只是i和j。
function twoSum(numbers, target) {
for (let i = 0; i < numbers.length; i ) {
for (let j = 0; j < numbers.length; j ) {
if (numbers[i] numbers[j] === target) {
return [i, j];
}
}
}
}
console.log(twoSum([1,2,3,4],5)) // 1 4 = 5 => [0,3]
console.log(twoSum([1,2,3,4],9)) // undefined since there is no solution
uj5u.com熱心網友回復:
[i, j]應用修復后,此演算法將起作用。但它的效率非常低。特別是,當沒有解決方案時,它會嘗試L2對。
現在,假設陣列的排序越來越多。設定i=0并找到最小的j,從右到左掃描,這樣n[i] n[j] ≥ target。接下來,增加i并調整j為最小的,使得n[i] n[j] ≥ target。依此類推,直到達到i和j交叉或完全相等。現在,對的數量L只是順序,一個相當大的節省。排序的成本與 成正比L.log(L)。
因此,一種策略是對陣列進行排序,并如上所述尋找一對匹配的值。要獲取索引(在初始陣列中),您可以保留一份副本并使用indexof. 另一種選擇是通過將其索引附加到每個元素來擴充陣列,并在排序期間將它們一起移動。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/404997.html
標籤:
