該文逐次講述二數之和,三數之和,四數之和。
一,二數之和 leetcode01
作為力扣第一題,應該很是經典了。回頭翻兩個月前做的解法,是暴力解法,當時還沒學習雜湊表,現在做個補充吧。
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
形象地說,暴力法是往後尋找匹配值,雜湊表是往前尋找匹配值。
此題如果用雙指標解法,對陣列排序會打亂索引順序,因此需要另外開闢乙個陣列。
publicint 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(intnums)
else
if (nums[left] + nums[right] left++;
else
if (nums[left] + nums[right] >target)
right--;}}
return
res;
}
三,四數之和 leetcode18
仍然可以用雙指標,在三數之和的基礎上再巢狀一層遍歷。
該題的雜湊表解法下次回顧時在做補充。
public list> foursum(int nums, inttarget)
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 和 ...