兩數之和,三數之和

2021-10-07 04:25:35 字數 2509 閱讀 5647

兩數之和

方法一:暴力(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...