一、leetcode之兩數之和
三種解法,其他實現可以參考leetcode解答
1.暴力法 2.二分法 3. 雜湊
給定num,在對應陣列中找到對應的兩個數。
classsolution:
def twosum1(self, nums: list[int], target: int) ->list[int]:
length =len(nums)
for i in
range(length):
for j in range(i+1, length):
if nums[i] + nums[j] ==target:
return
[i, j]
def twosum2(self, nums: list[int], target: int) ->list[int]:
length =len(nums)
num_2_idx = {} #
num_2_idx = # dict會覆蓋
for i in
range(length):
ifnot num_2_idx.__contains__
(nums[i]):
num_2_idx[nums[i]] =i
ori_nums =nums
nums = sorted(nums) #
原有的索引已經改變了
for i in
range(length):
left = i + 1right = length - 1complement = target -nums[i]
while left <=right:
j = (left + right) // 2 #
mid
if nums[j] >complement:
right = j - 1
elif nums[j] left = j + 1
elif nums[j] ==complement:
i_idx =num_2_idx[nums[i]]
j_idx =num_2_idx[nums[j]]
if nums[i] ==nums[j]:
j_idx = i_idx + 1 + ori_nums[i_idx+1:].index(nums[j])
return [i_idx, j_idx] #
返回的是排序前元素的索引
def twosum3(self, nums: list[int], target: int) ->list[int]:
num_2_idx = {} #
相當於逆序的暴力法
for i in
range(len(nums)):
complement = target -nums[i]
if num_2_idx.__contains__
(complement):
return
[num_2_idx.get(complement), i]
num_2_idx[nums[i]] =i
def twosum(self, nums: list[int], target: int) ->list[int]:
return self.twosum2(nums, target)
LeetCode 1 兩數之和
給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 step 1 class solution object def tw...
leetcode 1 兩數之和
1.兩數之和 這道題和程式設計之法上面的題目有以下幾個不同 1 題目所給定的陣列是無序的,程式設計之法裡面是預設有序的 2 要求輸出原陣列的序號,如果用乙個結構體維護陣列下標,那麼需要o n 的空間,顯然不是最好的方法 3 題目中包含負數,之前想用數值直接表示陣列下標,陣列值為原來的真正陣列下標,但...
leetcode 1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 class solution for int i 0 ...