Leetcode 1 兩數之和

2022-07-26 08:51:11 字數 1760 閱讀 1953

一、leetcode之兩數之和

三種解法,其他實現可以參考leetcode解答

1.暴力法 2.二分法 3. 雜湊

給定num,在對應陣列中找到對應的兩個數。

class

solution:

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 ...