力扣 15 三數之和 Golang

2021-10-03 12:31:09 字數 1273 閱讀 3443

知識點:陣列

難度:中等

題目:

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:

給定陣列 nums = [-1,

0,1,

2,-1,

-4],

滿足要求的三元組集合為:[[

-1,0,

1],[

-1,-1,2]]

**方法:**三指標法(在實現中解釋)

golang實現

func

threesum

(nums [

]int)[

]int

//2、三指標法:三個指標指向三個數a,b,c

//將a+b+c=0轉化為b+c=-a

//從排好序的最左邊的數開始,

//令其等於a,然後依次迴圈,令a等於其他數

//在每一輪迴圈中,把a看成定值,尋找b,c,使得b+c=-a

//這時在每一輪之內,相當於求解兩數之和問題

for i :=

0; i <

len(nums)-1

; i++

//在每一輪中

//使b等於大於a的最小的數,c等於大於a的最大的數

j := i +

1 z :=

len(nums)-1

for z > j

else

if nums[i]

+b+c <

0else

result =

(result, item)

//跳過重複資料

for j < z && nums[j]

== nums[j+1]

for j < z && nums[z]

== nums[z-1]

j++z--}}

}return result

}

執行:

複雜度分析:

時間複雜度:o(n*n)

力扣15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題解 這題wa了好多...

力扣 15 三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 思路 排序 雙指...

力扣15 三數之和 C

這道題兩個難點。第乙個是不能使用三層迴圈,因為會時間溢位,第二個也是主要的問題如何去重。一開始想要直接排序後去重,但是這樣的話會缺失解,比如這個解就得不到,所以不能直接去重。後來想到了可以判斷nums i 與nums i 1 是否相同,如果相同可以進行i 這樣就可以去重了,但這只是死一次去重,要用不...