題目描述:
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
測試示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
拓展:列表與字典常見操作的複雜度
operation
big-o
index
o(1)
o(1)
popo(1)
pop(i)
o(n)
insert(i, item)
o(n)
delo(n)
iteration
o(n)
contains / in
o(n)
sort
o(n log n)
multiply
o(nk)
get slice
o(k)
del slice
o(n)
set slice
o(n + k)
reverse
o(n)
concatenate
o(k)
operation
big-o
copy
o(n)
get item
o(1)
set item
o(1)
delo(1)
contains / in
o(1)
iteration
o(n)
解題思路:
判斷乙個元素是否在另乙個集合(字串、陣列、字典等)中時,字串和陣列的時間複雜度為 o(n),字典的時間複雜度為 o(1),因此在設計演算法時應盡量使用字典作為存放資料的手段。
回到原題,我們只需要遍歷一次陣列即可,時間複雜度為 o(n),具體實現如下:
class
solution
:def
twosum
(self, nums, target)
: d =
# d 的存放格式為
for i in
range
(len
(nums)):
if target - nums[i]
in d:
# 跳出迴圈條件為當前差值存在於字典中
return
[d[target - nums[i]
], i]
d[nums[i]
]= i # 如果原陣列存在相同數如 [3, 3],則將該鍵值更新為後乙個相同數的角標
return
leetcode 執行結果:
leetcode刷題 1 兩數之和
leetcode刷題 1.兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因...
leetcode刷題1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9。因為 nums 0 nums 1 2 ...
leetcode刷題 兩數之和(1)
本人成績差 基礎差 數學差 無演算法 特此建立此文件以自勉學習python,給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7...