知識點:陣列
難度:中等
題目:
給定乙個包含 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 這樣就可以去重了,但這只是死一次去重,要用不...