題目:給出乙個有n個元素的陣列s,s中是否有元素a,b,c滿足a+b+c=0?找出陣列s中所有滿足條件的三元組。這道題,我是想著直接用暴力求解,三重迴圈。。。結果答案對比是一樣的,這個測試就是不給我通過,就很奇怪,然後就去看了其他人的題解,使用的是雙指標,整體思想是把三數和為0轉換為兩數和為0 ,還是有幾個需要注意的點的。注意:三元組(a、b、c)中的元素必須按非降序排列。(即a≤b≤c)
解集中不能包含重複的三元組。
首先為了方便處理,先將陣列進行排序,(以後類似的題目都要注意,對順序沒有要求的,並且是亂序的,先去考慮一下對陣列排序是不是能夠簡化處理),將陣列排序之後就使得我們找三個和為0的數字有規律可循,並且能夠簡化很大部分的比較。
首先使用迴圈對第 0 - num.length-3的元素進行遍歷,通過確定當前元素,將三數之和轉換為了兩數之和,在每次進行處理之前需要進行一步去重操作,由於解集是要求不包含重複三元組的,因此如果當前元素等於其前乙個元素的話就直接跳過不用處理,對於每個需要處理的元素 i ,首先確定 left = i+1,right = num.length-1,然後對num[i] , num[left] , num[right] 三數之和進行判斷,
1)當 left2)當 left3)left完整**如下:
public arraylist> threesum(int num)
if(lefttemp = new arraylist();
temp.add(num[i]);
temp.add(num[left]);
temp.add(num[right]);
collections.sort(temp);
res.add(temp);
int templeft = num[left];
while(left}else }}
}return res;
}
陣列中相加和為0 的三元組2020 11 28
題目描述 給出乙個有n個元素的陣列s,s中是否有元素a,b,c滿足a b c 0?找出陣列s中所有滿足條件的三元組。注意 三元組 a b c 中的元素必須按非降序排列。即a b c 解集中不能包含重複的三元組。例如,給定的陣列 s 解集為 10,0,10 10,10,20 分析 1 先將陣列進行排序...
按位與為零的三元組
給定乙個整數陣列 a,找出索引為 i,j,k 的三元組,使得 0 i a.length 0 j a.length 0 k a.length a i a j a k 0,其中 表示按位與 and 操作符。暴力法看,這道題就是把先算出a i a j 然後再遍歷一遍陣列,計算能夠和其相與結果為0的元素。其...
求三數之和為零的三元組集合
題目要求三數之和為零,即 a b c 0 那麼若滿足b c a的話就滿足題目的第乙個要求啦。假設 a tem 那麼 b c tem就說明滿足條件。這樣的話三數之和變成了兩數之和,再兩個數字和的基礎上,只需要找到乙個tem為定點以後,然後再判斷陣列中剩下的數字兩兩相加是否等於tem即可。若用暴力求解的...