【LeetCode】1.Two Sum両数の和(Python)
8210 ワード
目次 1. タイトル 2. 解答 2.1誤答(自己の) 2.2正解(他人の) 2.3対比 1.テーマ
整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.例:nums=[2,7,11,15]が与えられ、target=9はnums[0]+nums[1]=2+7=9であるため[0,1]を返す
注意問題で返されるのは配列の下付きです.
最も考えやすいのは暴力解法で、明らかに実行できるが必要ない.
2.1誤答(自己)まず、タイトルは下付き文字を返すことを要求するので、保存数の対応する下付き文字を保存し、Pythonでは辞書を使って下付き文字を保存する操作を行う.辞書形式は「数:下付き」 次に、配列をソートした後、ヘッダポインタを設定し、ヘッダポインタとtargetより大きい場合、ヘッダポインタを左にシフトさせることができると考えられる.和がtarget未満の場合、ヘッダポインタは右に移動します.和がtargetに等しい場合は、対応する2つの数が見つかり、辞書に対応する下付き文字が見つかり、結果が返されます.考えはコードを回して、内心は 喜びます実行エラーnums=[3,3]の場合、上記のコードに従って[1,1]が返されます.配列に同じ要素が存在する場合は無視されます. 2.2正解(他人の)
以下の考え方は,他人の正しいコードに基づいて考え方を復唱する.他の人が誰なのか、私も知らない、LeetCodeの上のまず,テーマは配列の下付き文字を返すことを要求するので,数の対応する下付き文字を保存すべきであり,Pythonでは辞書を用いて下付き文字を保存する操作を行う.字典の形式は“数:下标”です(私のこの考え方は正しい窃喜√) 配列を順次巡回し、「target-現在数」が辞書にある場合、対応する2つの数を見つけ、現在の下付き文字を返し、辞書に「target-現在数」に対応する下付き文字を見つける.「target-現在数」が辞書にない場合は、「現在数:現在数の下付き」を辞書に保存します.
複雑に考えないでください、実はとても簡単で、正しいことまで1つだけなくして、このなくして菜鳥と大物の差8博文は記録用で、伝言の交流を歓迎します.
整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.例:nums=[2,7,11,15]が与えられ、target=9はnums[0]+nums[1]=2+7=9であるため[0,1]を返す
注意問題で返されるのは配列の下付きです.
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
2.解答最も考えやすいのは暴力解法で、明らかに実行できるが必要ない.
2.1誤答(自己)
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
if len(nums) < 2:
return None
d = {}
for i in xrange(len(nums)):
d[nums[i]] = i
nums.sort()
left = 0
right = len(nums) - 1
two = nums[left] + nums[right]
while left < right and two != target:
if two < target:
left += 1
else:
right -= 1
two = nums[left] + nums[right]
return [d[nums[left]], d[nums[right]]]
以下の考え方は,他人の正しいコードに基づいて考え方を復唱する.他の人が誰なのか、私も知らない、LeetCodeの上の
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d = {}
for i in xrange(len(nums)):
other = target - nums[i]
if other in d:
left = d[other]
right = i
return [left, right]
d[nums[i]] = i
return None
2.3比較複雑に考えないでください、実はとても簡単で、正しいことまで1つだけなくして、このなくして菜鳥と大物の差8博文は記録用で、伝言の交流を歓迎します.