在陣列中找出3個數使得它們和為0

2021-07-29 20:43:27 字數 762 閱讀 6931

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 這個問題也被...