兩數之和
方法一:暴力(throw new illegalargumentexception)
時間複雜度:o(n^2) 空間複雜度:o(1)
public
int[
]twosum
(int
nums,
int target);}
}}throw
newillegalargumentexception
("no twosum solution ");
}
//時間複雜度:o(n) 空間複雜度:o(n)
public
int[
]twosum
(int
nums,
int target);}
map.
put(nums[i]
, i);}
throw
newillegalargumentexception
("no twosum solution");
}
三數之和
開始接觸到這題的各位大佬的解法後, 感覺這類解法思路的確很好, 就是先排序, 然後雙指標的思路,
在這就不詳述了, 可想了想, 還是想從暴力解法試試, 踩踩坑, 這樣才能對比出 成熟解法的高效,優點
我也相信 這種成熟解法也是人們在嘗試暴力解法後, 踩坑之後, 一步一步優化出來的,
方法一: 暴力法o(n^3)
為什麼一定要給陣列排序?
最初不太明白為何一定要先給陣列排序的, 嘗試完暴力解法後, 發現先給陣列排好序是最簡便的處理去重的方法
/*
示例 nums: [-1, -1, 0, 1, 2, -1, -4]
不得不一開始就給陣列排序, 這樣好去掉重複的三元組
不然就會出現這種情況: [ -1, 0, 1 ], [ 0, 1, -1 ], 還是得排序後去重
排好序後, 重複的元素一定在一起, 當和前邊的數相等時, 說明這個數已經查詢過了, 就不必查詢了
*/public list
>
threesum
(int
nums)
arrays.
sort
(nums);if
(nums[0]
>
0|| nums[nums.length -1]
<0)
return result;
for(
int i =
0; i < nums.length -
2; i++)}
}}return result;
}
方法一: 雙指標
// 邊界 1 nums 為null或nums.length < 3 return;
// 2 排序後nums[0] > 0 或者 nums[length - 1] < 0 return; 排序後最小的值肯定不大於0, 最大的值肯定 不小於0,出現這兩種情況結果不可能相加為0
// 3 for迴圈中
// 最左側的數大於 0 , 那麼後邊兩個數也必然大於 0 , 三數之和必然大於 0,
//相等的跨過去,不然,最後結果會有重複的三元組
// sum > 0 while(j < k && nums[k] == nums[–k]);
// sum < 0 while( j < k && nums[j] == nums[++j]);
// sum == 0
while (j < k && nums[j] == nums[++j]);
while (j < k && nums[k] == nums[–k]);
public
int[
]threesum
(int
nums,
int target)
arrays.
sort
(nums);if
(nums[0]
>
0|| nums[nums.length -1]
<0)
return list;
for(
int i =
0; i < nums.length; i++
)else
if(sum <0)
else
if(sum ==0)
}}return list;
}
區別int
arrar =
;int k = arrar.length -1;
while
(arrar[k]
== arrar[
--k]);
// 輸出k的下標為0, 直接到達不相等的下標
// 上下兩個的區別
while
(arrar[k]
== arrar[k -1]
)// 輸出k的下標為1 未到達不相等的下標
兩數之和 三數之和 四數之和
兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...
演算法 兩數之和,三數之和,四數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
Leetcode 兩數之和,三數之和,四數之和
兩數之和的思想比較簡單啦 就是 使用乙個map儲存其值,然後將其下標返回即可 三數之和 四數之和的思想比較類似,就是使用雙指標的思想 三數之和的 如下所示 四數之和的 如下 有一些優化 四數之和是在三數之和的基礎上增加了一層迴圈,class solution 獲取當前最大值 int max1 num...