中英雙文網(wǎng)站怎么做磁力搜索器下載
??途W(wǎng): BM54
題目: 數(shù)組中所有不重復(fù)的滿足三數(shù)之和等于0的數(shù),非遞減形式。
思路: 數(shù)組不小于3。不重復(fù)非遞減,需先排序。使用idx從0開始遍歷到n-2, 如果出現(xiàn)num[idx]==num[idx-1]的情況,忽略繼續(xù)下一個(gè)idx;令left = idx+1, right = n-1,雙指針迎面而行,如果滿足num[left]+num[right]=-num[idx],則獲取一個(gè)滿足條件的解;為避免重復(fù),分別對(duì)left、right一邊檢測(cè)一邊移動(dòng),注意邊界條件left+1<right;如果num[left]+num[right]>-num[idx],則right--;否則left++。
代碼:
// gopackage mainimport "sort"// import "fmt"/*** 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請(qǐng)勿修改,直接返回方法規(guī)定的值即可*** @param num int整型一維數(shù)組* @return int整型二維數(shù)組*/
func threeSum( num []int ) [][]int {// write code hereif len(num) < 3 {return [][]int{}}sort.Ints(num)res := [][]int{}for idx := 0; idx < len(num) - 2; idx++ {if idx > 0 && num[idx] == num[idx-1] {continue}left := idx + 1right := len(num) - 1target := -num[idx]for left < right {if num[left] + num[right] == target {res = append(res, []int{num[idx], num[left], num[right]})for left + 1 < right && num[left] == num[left+1] {left++}for right - 1 > right && num[right] == num[right-1] {right--}left++right--} else if num[left] + num[right] > target {right--} else {left++}}}return res
}