leetcode 1. 兩數之和
方法1:排序+查詢
方法2:雜湊法
class
solution
:def
twosum
(self, nums: list[
int]
, target:
int)
-> list[
int]
:sum=0
m =for i in
range
(len
(nums)):
sum= nums[i]
if target -
sumin m.keys():
return
[m[target -
sum][0
],i]
ifsum
in m.keys():
m[sum]
+=[i]
else
: m[
sum]
=[i]
leetcode 15. 三數之和
這道題其實跟上一題乙個思路,先減去乙個數不就是兩數之和了嗎
排序 + 雙指標,可拓展為target為任意值
class
solution
:def
threesum
(self, nums: list[
int]
, target)
-> list[list[
int]]:
nums.sort(
) res =
for i in
range
(len
(nums)-2
):if nums[i]
> target:
break
elif i >
0and nums[i]
== nums[i -1]
:continue
else
: l = i +
1 r =
len(nums)-1
tmp = target - nums[i]
while l < r:
if nums[l]
> tmp:
break
elif nums[l]
== nums[l -1]
: l +=
1continue
elif r <
len(nums)-1
and nums[r]
== nums[r +1]
: r -=
1continue
if nums[l]
+ nums[r]
> tmp:
r -=
1elif nums[l]
+ nums[r]
< tmp:
l +=
1else
:[nums[i]
, nums[l]
, nums[r]])
l +=
1 r -=
1return res
時間複雜度:o(n
2)
o(n^2)
o(n2
)空間複雜度:o(n
log(
n)
)o(nlog(n))
o(nlog
(n))
排序
陣列之和系列
給出乙個陣列,求其中三個數之和為零的集合 examples input 1,0,1,2,1,4 output 1,0,1 1,1,2 一開始嘗試的很多方法,想bsp回溯,雙指標移動等等,都沒有用,複雜度都是o n 最後想到了以前程式設計書上的二分法,在這裡也是發篇文章記錄下怕自己忘記 class s...
LeetCode系列 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
LeetCode系列 1 兩數之和
描述 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...