兩數之和 三數之和 四數之和

2021-10-22 01:43:01 字數 2650 閱讀 2172

兩數之和意思就是

給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。

n數之和的意思是

給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。

最基礎的,也是最關鍵的就是兩數之和。

排序 + 雙指標

排序之後,乙個指標指向頭,乙個指標指向尾。

如果這兩個數的和大於了target,說明陣列中沒有了和尾之和等於target的數字了,所以這個數字就可以排除了,於是尾指標減一。

否則就是尾指標和頭指標的和小於等於target。這時候

如果等於就放入答案,如果小於就讓頭指標加上1。

那麼怎麼來去重呢?

保證每個相同的數字只被使用一次。由於排序之後,相同的數字相鄰,所以只需要相鄰的數字相同的時候不在進入迴圈就可以實現去重操作。

while()

if(內容之和等於target) 放入答案。

//內容和小於targe

頭移動;

while

(相鄰的內容相同) 頭指標後移;

}

vectorint>>

twosum

(vector<

int>

& nums,

int target,

int start));

while

(j < k && nums[j]

== a) j++;}

return ans;

}

由於三數之和和四數之和只不過是在雙數之和的基礎上在加一層遍歷,所以不在贅述。

vectorint>>

threesum

(vector<

int>

& nums)

while

(j < k && nums[j]

+ nums[k]

>

-a)int b = nums[j]

, c = nums[k];if

(j < k && a + b + c ==

0) ans.

push_back()

;while

(j < k && nums[j]

== b) j++;}

while

(i < n && nums[i]

== a) i++;}

return ans;

}

vectorint>>

threesum

(vector<

int>

& nums,

int target,

int start)

int b = nums[j]

, c = nums[k];if

(j < k && b + c == a) ans.

push_back()

;while

(j < k && nums[j]

== b) j++;}

while

(i < n && nums[i]

== target - a) i++;}

return ans;

} vectorint>>

foursum

(vector<

int>

& nums,

int target)

}return ans;

}

這裡使用三數之和呼叫雙數之和。

四數之和呼叫三數之和。

結構化之後,可以更方便使用。

這裡的四數之和也可以呼叫雙數之和,這樣是更優化的,但是比較懶…

所以就出現了內容的部分耦合。

結果就是,雙數之和是最基本也是最關鍵的。其他的n數都是在此基礎之上加上n-2重迴圈。

vectorint>>

twosum

(vector<

int>

& nums,

int target,

int start));

while

(j < k && nums[j]

== a) j++;}

return ans;

}vectorint>>

threesum

(vector<

int>

& nums,

int target,

int start)

while

(i < n && nums[i]

== target - a) i++;}

return ans;

}vectorint>>

foursum

(vector<

int>

& nums,

int target)

}return ans;

}

演算法 兩數之和,三數之和,四數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leetcode 兩數之和,三數之和,四數之和

兩數之和的思想比較簡單啦 就是 使用乙個map儲存其值,然後將其下標返回即可 三數之和 四數之和的思想比較類似,就是使用雙指標的思想 三數之和的 如下所示 四數之和的 如下 有一些優化 四數之和是在三數之和的基礎上增加了一層迴圈,class solution 獲取當前最大值 int max1 num...

兩數之和 三數之和 四數之和cpp

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。class solution mp target nums i i return 給你乙個包含 n 個整...