題目.
middle意思
這個其實就是twosum的公升級,另外有個技巧就是先排序,然後在生成的結果中保證a[0] <= a[1] <= a[2]就可以達到去重的目的
package main
import
("fmt"
"sort"
)func
twosum
(numoccur map
[int
]int
, numunique [
]int
, target int)[
][]int
occur, ok := numoccur[t]
if!ok
if t != v
)continue
}if t == v && occur >1)
}}return result
}func
threesum
(nums [
]int)[
][]int
numoccur :=
make
(map
[int
]int
)for
_, v :=
range nums
numunique :=
make([
]int,0
,len
(numoccur)
)for k :=
range numoccur
sort.
ints
(numunique)
for i, v :=
range numunique
//1 v
for_
, subv :=
range
twosum
(numoccur, numunique[i+1:
],0-v)
//2 vs
if numoccur[v]
>=
2&& v <0)
}}//3vs
if numoccur[v]
>=
3&& v ==0)
}}return result
}func
main()
))}
o(n*n)
o(n*n)
執行用時 :1372 ms, 在所有 go 提交中擊敗了60.84%的使用者
記憶體消耗 :42.8 mb, 在所有 go 提交中擊敗了99.77%的使用者
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 三數之和
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。有兩種寫法 第一種耗時久,但容易解讀 class solution if nums.length 3 else if ...
15 三數之和
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析排序 雙指標避免...