3sum
note: the solution set must not contain duplicate triplets.
for example, given array s = [-1, 0, 1, 2, -1, -4]
example 1
input: [-1, 0, 1, 2, -1, -4]
a solution set is:
[ [-1, 0, 1],
[-1, -1, 2]
]
亂序陣列,需要找到所有組合,需要三層迴圈,複雜度為o(n³)。
可以先排序,排序後只需要兩層迴圈,複雜度為o(n²)。第一層迴圈遍歷所有元素,第二層迴圈由於陣列已經排序,只需要頭尾兩個指標像中間靠攏,一但三個元素相加為target,則新增此三元組,然後繼續像中間靠攏掃瞄。
需要避免重複的三元組被加入
class solution(object):
def threesum(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""nums.sort()
ret =
for i in range(len(nums) - 2):
# 避免重複
if i > 0 and nums[i] == nums[i-1]:
continue
j, k = i + 1, len(nums) - 1
while j < k:
if nums[i] + nums[j] + nums[k] == 0:
j += 1
k -= 1
# 避免重複
while j < k and nums[j] == nums[j - 1]:
j += 1
while j < k and nums[k] == nums[k + 1]:
k -= 1
elif nums[i] + nums[j] + nums[k] < 0:
j += 1
else:
k -= 1
return ret
等差三元組
題目 和是2組不同的等差三元組,除了等差的性質之外,還有個奇妙的地方在於 5 2 3 2 1 2 7 2 5 2 3 2 n 15。同這對三元組也存在同樣的性質 19 2 15 2 11 2 7 2 5 2 3 2 n 15。這種成對的三元組還有很多。當n 15時,有3對,分別是和,和,和。現給出乙...
完美三元組
問題 定義完美三元組,a,b,d a是d的倍數,b是d的倍數,且a b d 1 輸入 t組測試資料,第一行乙個t 1 t 10000 之後t行每行兩個整數l,r,表示三元組中a 的取值區間 l,r 在此條件下,求滿足的完美三元組的總數 1 l r 100000 輸出 乙個整數。分析 首先,a的值已經...
遞增三元組
遞增三元組 描述給定三個整數陣列a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai bj ck 輸入第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,...