在陣列中找出x y z 0的組合

2022-05-10 11:58:04 字數 454 閱讀 2185

就是找x+y=-z的組合

轉化為找出值為-z滿足x+y=-z的組合

解法一:

為了查詢,首先想到排序,為了後面的二分,nlogn,

然後x+y的組合得n^2的複雜度,加上查詢是否為-z,複雜度為nlogn + n^2 * logn

解法二:

還是先從小到大排序 nlogn

假設陣列排序後為 a b c d e f

我們還是要找x+y=-z

會發現-z存在的可能只能是a+f和b+e,不會存在a+e和b+f這種情況(這裡很重要,保證了演算法的正確性),所以兩個指標一頭一尾往中間掃,肯定能找出來

fist + last < sum 則將fist++,如果fist + last > sum,則last--。這樣的話只要對每個進行這種查詢就好了

所以複雜度為nlogn+n*n

在陣列中找出單個的數

1 陣列中所有數都是成對出現,只有乙個數隻出現一次,找出這個數 include int main int len sizeof a sizeof int 計算陣列中數字個數 int num 0 int i 0 for i 0 i len i printf num d n num return 0 2...

在陣列中找出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個數使得它們和為0

leetcode上的原題,美圖的筆試題目。本質上這個問題是2數之和的問題擴充套件 在給定的陣列中找出兩個數a,b,使得a b sum。三個數之和為0,即a b c 0,可以轉化為a b c,這需要保證 c在陣列中。下面 採用了兩個迴圈,第乙個迴圈代表初始值,即先是第乙個值a 0 不變,計算a 0 a...