中等 18 四數之和

2022-06-09 09:45:09 字數 1295 閱讀 5801

該文逐次講述二數之和,三數之和,四數之和。

一,二數之和 leetcode01

作為力扣第一題,應該很是經典了。回頭翻兩個月前做的解法,是暴力解法,當時還沒學習雜湊表,現在做個補充吧。

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

形象地說,暴力法是往後尋找匹配值,雜湊表是往前尋找匹配值。

此題如果用雙指標解法,對陣列排序會打亂索引順序,因此需要另外開闢乙個陣列。

public

int twosum(int nums, int

target) ;

map.put(nums[i], i);

}return

newint

{}; }

二,三數之和 leetcode15

給你乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

由二數之和可以考慮雙指標解法,對每個元素,在剩餘陣列中找兩數之和。雙指標解法難點在於去重。

時間複雜度分析:排序:nlogn,迭代:n,雙指標:n  總複雜度:o(n2)

public list> threesum(int

nums)

else

if (nums[left] + nums[right] left++;

else

if (nums[left] + nums[right] >target)

right--;}}

return

res;

}

三,四數之和 leetcode18

仍然可以用雙指標,在三數之和的基礎上再巢狀一層遍歷。

該題的雜湊表解法下次回顧時在做補充。

public list> foursum(int nums, int

target)

else

if (nums[left] + nums[right] >curtarget)

right--;

else

if (nums[left] + nums[right] left++;}}

}return

res;

}

18 四數之和

給定乙個含有 n 個整數的陣列 s,數列 s 中是否存在元素 a,b,c 和 d 使 a b c d target 請在陣列中找出所有滿足各元素相加等於特定值 的不重複組合。注意 解決方案集不能包含重複的四元組合。例如,給定陣列 s 1,0,1,0,2,2 並且給定 target 0。示例答案為 1...

18 四數之和

給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 target ...

18 四數之和

給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 ...