leetcodeの2つの数の和II-秩序配列pythonを入力


昇順に配列された秩序配列を指定し、2つの数を見つけて、それらの合計が目標数に等しいようにします.
関数は、index 1とindex 2の2つの下付き値を返す必要があります.index 1はindex 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