leetcode上的原題,美圖的筆試題目。
本質上這個問題是2數之和的問題擴充套件:
在給定的陣列中找出兩個數a,b,使得a+b=sum。
三個數之和為0,即a+b+c=0,可以轉化為a+b=-c,這需要保證-c在陣列中。下面**採用了兩個迴圈,第乙個迴圈代表初始值,即先是第乙個值a[0]不變,計算a[0]+a[1]+a[n-1],若大於0則k減1,計算a[0]+a[1]+a[n-2],若小於0則j加1,計算a[0]+a[2]+a[n-1]...如果存在多個重複值,這可能會加入重複的數對,不過使用容器set可以解決該問題,相同的數對不會出現在set中。
set> find_triplets(vectorarr)
} }return ret;
}
可以不使用容器set去重複,迴圈時跳過重複相同的數。
vector> find_triples(vectorarr)
); while (lo < hi && arr[lo] == arr[lo + 1])++lo;//跳過重複值
while (lo < hi && arr[hi] == arr[hi - 1])--hi;
++lo;
--hi;
}else if (arr[lo] + arr[hi] < sum)
++lo;
else
--hi;
}} }
return ret;
}
在陣列中找出3個數使得它們和為0
給定乙個集合s,試找出3個數a,b,c,使得a b c 0。也即從集合中找出所有的和為0的3個數。例如 集合s 則滿足條件的3個數有2對 1,0,1 和 1,2,1 注意 1,1,0 與 1,0,1 算同乙個解,所以不用重複考慮。當然該例子集合的解也可以寫成 0,1,1 和 2,1,1 這個問題也被...
在陣列中找出3個數使得它們和為k
給定乙個集合s,試找出3個數a,b,c,使得a b c 0。也即從集合中找出所有的和為0的3個數。例如 集合s 則滿足條件的3個數有2對 1,0,1 和 1,2,1 注意 1,1,0 與 1,0,1 算同乙個解,所以不用重複考慮。當然該例子集合的解也可以寫成 0,1,1 和 2,1,1 這個問題也被...
在陣列中找出3個數使得它們和為k
給定乙個集合s,試找出3個數a,b,c,使得a b c 0。也即從集合中找出所有的和為0的3個數。例如 集合s 則滿足條件的3個數有2對 1,0,1 和 1,2,1 注意 1,1,0 與 1,0,1 算同乙個解,所以不用重複考慮。當然該例子集合的解也可以寫成 0,1,1 和 2,1,1 這個問題也被...