leetcodeの2つの数の和II-秩序配列pythonを入力
昇順に配列された秩序配列を指定し、2つの数を見つけて、それらの合計が目標数に等しいようにします.
関数は、index 1とindex 2の2つの下付き値を返す必要があります.index 1はindex 2より小さくなければなりません.
説明:が返す下付きスケール値(index 1およびindex 2)は、ゼロから始まるものではありません. 入力ごとに一意の答えしか対応していないと仮定し、同じ要素を繰り返し使用することはできません.
例:
テーマ構想:
直接暴力的に解決すれば,時間的複雑度は(O(n**2))であり,この方法はpassになることは明らかである.
では、与えられた配列が秩序化されていると、難易度が低下するのではないでしょうか.秩序化された配列であれば,targetより大きい場合は末尾を左にシフトし,2つの数がtargetに等しくなるまで末尾を右にシフトし,この方法の時間的複雑さは(O(nlogn)である.
最後の方法.pythonにはdictとC++のmap機能があります.まず、辞書を作成します.d={}、辞書のkeyは配列の値numberであり、valueは対応する位置であり、numberとtarget-numberが辞書の中にある限り、答えを見つけます.この方法の時間的複雑さは(O(n))である.
関数は、index 1とindex 2の2つの下付き値を返す必要があります.index 1はindex 2より小さくなければなりません.
説明:
例:
: numbers = [2, 7, 11, 15], target = 9
: [1,2]
: 2 7 9 。 index1 = 1, index2 = 2 。
テーマ構想:
直接暴力的に解決すれば,時間的複雑度は(O(n**2))であり,この方法はpassになることは明らかである.
では、与えられた配列が秩序化されていると、難易度が低下するのではないでしょうか.秩序化された配列であれば,targetより大きい場合は末尾を左にシフトし,2つの数がtargetに等しくなるまで末尾を右にシフトし,この方法の時間的複雑さは(O(nlogn)である.
最後の方法.pythonにはdictとC++のmap機能があります.まず、辞書を作成します.d={}、辞書のkeyは配列の値numberであり、valueは対応する位置であり、numberとtarget-numberが辞書の中にある限り、答えを見つけます.この方法の時間的複雑さは(O(n))である.
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
d = {} # d is a dict to map the value of numbers and the index in numbers
size = 0
while size < len(numbers):
if not numbers[size] in d:
d[numbers[size]] = size + 1
if target - numbers[size] in d:
if d[target-numbers[size]] < size + 1:
answer = [d[target - numbers[size]] , size + 1]
return answer
size = size + 1