當(dāng)前位置:
首頁 >
在数组中找出3个数使得它们和为0
發(fā)布時(shí)間:2025/4/14
26
豆豆
生活随笔
收集整理的這篇文章主要介紹了
在数组中找出3个数使得它们和为0
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:
給定一個(gè)集合S,試找出3個(gè)數(shù)a,?b,?c,使得a+b+c=0。也即從集合中找出所有的和為0的3個(gè)數(shù)。 例如:集合S={-1,0,?1,?2,?-1,?4},則滿足條件的3個(gè)數(shù)有2對:(-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)與(-1,0,1)算同一個(gè)解,所以不用重復(fù)考慮。當(dāng)然該例子集合的解也可以寫成:(0, 1, -1)和(2, -1, -1)。解法:
這個(gè)問題也被稱作3數(shù)和問題,3數(shù)和問題是下面這個(gè)問題的擴(kuò)展。問題:給定一個(gè)n個(gè)元素的集合S,找出S中滿足條件的整數(shù)對A,B, ?使得A+B=K。
假定集合S已經(jīng)排好序的話,則上面這個(gè)問題可以在O(n)的時(shí)間內(nèi)解決。使用2個(gè)索引值first和last,分別指向第一個(gè)元素和最后一個(gè)元素,設(shè)指向的第一個(gè)元素為A,則我們的任務(wù)就是找到對應(yīng)于A的元素B,B=K-A。如果last指向的元素小于B,則first加1,指向后面的一個(gè)元素;如果last指向的元素大于B,則last減1。這樣最終一步步逼近結(jié)果,時(shí)間復(fù)雜度為O(n)。該算法代碼如下: [cpp]?view plaincopy
總結(jié)
以上是生活随笔為你收集整理的在数组中找出3个数使得它们和为0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL Pair
- 下一篇: 2n个整数分为两组,使两组和差的绝对值最