題意:給出長度為n的整數序列,要求找出滿足條件的所有不同三元組使得三個數和為0
兩個三元組不相同意義為:集合中至少有乙個數不同
思路:序列按公升序排序,列舉a[k],接著在[0,k-1]選出兩個數a[i],a[j] 相加使得和為-a[k],即為答案 複雜度o(n*n)
由於序列是公升序排序,所以a[i]+a[j]的值是會隨著i,j的移動而顯得有單調性
當a[i]+a[j]<-a[k]:則i++ (當前的a[i]==a[i-1]的話,說明不需要再去比較i了 直接i++去重
當a[i]+a[j]>-a[k]:則j-- (當前的a[j]==a[j+1]的話,說明不需要再去比較j了,直接j--去重
相等的話統計答案,接著i++,j--
**:
class solution {
public:
vector> threesum(vector& nums) {
int n=nums.size();
sort(nums.begin(),nums.end());
vector> ans;
for(int k=2;k0) ) i++;
else if(sum>tmp || (nums[j]==nums[j+1] && j+1
雙指標解決Leetcode 15 3 Sum
1.3sum其實和2sum思路差不多。只要把第三個數變成2sum的target就好了。當然要先sort一下,原陣列是無序的。2.也要考慮重複陣列的情況。比如left i left i 1 說明這個數字在i 1的時候應該考慮過了,需要skip.同理right也是一樣。還有一種重複情況是,當target...
leetcode 15 3sum 兩種解法總結
方法一 思路 將結果總體分為3種 1.包含0 a.包含乙個0 b.3個都是0 2.兩正一負 3.兩負一正 按照零正負將陣列分為三組,依次兩兩組合兩正之和來檢視有沒有絕對值相等的負數,兩負數同理。最後將返回的vector去重。注意 兩正一負,兩負一正在返回結果時要注意三個數字的順序,否則會影響去重結果...
15 3Sum 求三數之和
給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 如果是陣列是有序...