示例:
給定 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
遍歷,轉換為求另外兩數之和,求兩數之和的方式改成設定兩個指標st
,ed
,從陣列的兩端走,根據兩處值的和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 ...