leetcode 1 two sum 雜湊查詢

2021-07-29 15:00:21 字數 1245 閱讀 2946

題目:

給乙個list, 給乙個target. 問list中哪兩個數的和為target.

逐個求差.

用map[num]=index儲存資訊.

不需要預先把所有的值都放到map中, 因為遍歷到a的時候發現map裡面沒有b也沒關係, 遍歷到b的時候a就已經在map裡了.

class

solution

(object):

deftwosum

(self, nums, target):

""" :type nums: list[int]

:type target: int

:rtype: list[int]

"""map={}

for i in range(len(nums)):

a=nums[i]

b=target-a

if(not map.has_key(b)):

map[a]=i

else:

return [map[b],i]

逐個求和.

用numandpos這個自定義的類儲存數值和位置, 然後按照值排序.

i與j兩個游標分別在開始與結尾, 逐漸向中間靠攏, 若求出指定的和則結束.

class

numandpos:

num=0

pos=0

def__init__

(self, num, pos):

self.num=num

self.pos=pos

class

solution

(object):

deftwosum

(self, nums, target):

""" :type nums: list[int]

:type target: int

:rtype: list[int]

"""arr=

i=0for num in nums:

i+=1

arr=sorted(arr,key=lambda x:x.num)

i=0;

j=len(arr)-1

while (true

and iif(sum1

elif(sum>target):

j-=1

else:

return [arr[i].pos,arr[j].pos]

LeetCode 1 Two Sum 解題報告

題意 陣列nums中,有兩個元素的和是target,找出這兩個元素的位置。思路 維護乙個map,用陣列的元素的值做key,用元素的位置做value。遍歷nums,對每個num來說,如果map target num 有值的話,就返回map target num 和num的位置,如果沒有找到的話,就把n...

LeetCode 1 two sum 雙指標法

leetcode 1 two sum 給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。輸入陣列為亂序陣列,雙指標法,先拷貝輸入陣列進行公升序,從頭尾遍歷,相加比較,找到後通過遍歷輸出原陣列位置 void quicksort int list,...

LeetCode 1 Two Sum 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 方法一 暴力法 暴力法很簡...