leetCode n數之和 雜湊表 雙指標

2022-02-13 12:07:50 字數 2914 閱讀 2192

示例:

給定 nums =[2

,7,11

,15], target =

9因為 nums[0]

+ nums[1]

=2+7

=9所以返回 [0,

1]

思路:設定乙個雜湊表map,記錄每個值對應的索引i,通過判斷target-nums[i]的值是否存在來確定另乙個值的位置。

/* 兩數之和 */

vartwosum

=function

(nums, target)

;for

(let i =

0; i < nums.length; i++

) map[nums[i]

]= i;}}

;let res =

twosum([

2,7,

11,15]

,9);

//[0,1]

console.

log(res)

;

示例:

給定陣列 nums =[1

,0,-

1,0,

-2,2

],和 target =

0。滿足要求的四元組集合為:[[

-1,0

,0,1

],[-

2,-1

,1,2

],[-

2,0,

0,2]

]

思路1:每次迴圈確定nums[i],另外兩數之和為target-nums[i],利用上面的兩數之和方法即可求到對應值,但是提交超時。

/* ---------------雜湊表實現(超時)--------------- */

varthreesum

=function

(nums)

;for

(let j = i +

1; j < nums.length; j++

)else}}

let res =

;/* 將set內的字串轉陣列給res */

set.

foreach

(v => res.

push

(v.split

(','))

);/* 子陣列排序輸出 */

return res.

sort()

;};console.

log(

threesum([

-1,0

,1,2

,-1,

-4])

);//[ [ '-1', '-1', '2' ], [ '-1', '0', '1' ] ]

思路2:先將nums陣列排序,然後i遍歷,轉換為求另外兩數之和,求兩數之和的方式改成設定兩個指標sted,從陣列的兩端走,根據兩處值的和nums[st]+nums[ed]大小確定st走還是ed走,符合條件則將nums[i],nums[st],nums[ed]構成的陣列放到res中。

/* ----------------雙指標實現---------------- */

varthreesum

=function

(nums)

else

if(sum > target)

else}}

return res;};

console.

log(

threesum([

-1,0

,1,2

,-1,

-4])

);//[ [ '-1', '-1', '2' ], [ '-1', '0', '1' ] ]

示例:

給定陣列 nums =[1

,0,-

1,0,

-2,2

],和 target =

0。滿足要求的四元組集合為:[[

-1,0

,0,1

],[-

2,-1

,1,2

],[-

2,0,

0,2]

]

思路:與三數之和雙指標一樣的步驟,多加一層迴圈,並且給新的迴圈加去重判斷即可。

/* 四數之和 */

varfoursum

=function

(nums, target)

else

if(nums[x]

+ nums[y]

> tgt)

else}}

}return res;};

let arr =[-

3,-2

,-1,

0,0,

1,2,

3];let target =0;

console.

log(

foursum

(arr, target));

/* [

[-3, -2, 2, 3],

[-3, -1, 1, 3],

[-3, 0, 0, 3],

[-3, 0, 1, 2],

[-2, -1, 0, 3],

[-2, -1, 1, 2],

[-2, 0, 0, 2],

[-1, 0, 0, 1]

] */

LeetCode雜湊表 1兩數之和

題目描述 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

01 兩數之和 (雜湊表演算法)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

噶 陣列 兩數之和(雜湊表)

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...