リートコードブラッシングレコード(7):2つの数値の合計167II入力順序付き配列

ブラシの質問のウェブサイト:Leetcode

難易度:簡単

言語:Python

計画:簡単->から中->から難しい。

1.167個の2つの数値の合計II入力順序付き配列

1.1件名:

降順ではない順序で配置された整数配列が与えられたnumbers場合、合計がターゲット数と等しくなるように、配列内で2つの数を見つけてくださいtarget

関数は、これら2つの数値の添え字値を長さ2の。numbersの添え字は1からため、回答配列はを満たす必要があり1 <= answer[0] < answer[1] <= numbers.lengthます。

各入力は一意の回答に対応していると想定でき、同じ要素を再利用することはできません

  • 例1
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:27 之和等于目标数 9 。因此 index1 = 1, index2 = 2
  • 例2
输入:numbers = [2,3,4], target = 6
输出:[1,3]
  • 例3
输入:numbers = [-1,0], target = -1
输出:[1,2]

1.2思考と分析

まず、質問の意味を理解し、降順ではない順序で配列を入力します。現時点では、最初の反応は、ダブルポインターのアイデアを使用することです。(最初は思いもよらなかったのですが、コメントを読んで思い出しました)。

次に、左のポインタから右へ、右のポインタから左へと分析して、目標値と等しいかどうかを計算します。
たとえば、配列[2,7,11,15]と目標値を入力する場合、最初に追加を9検討して、それが目標値と等しいかどうかを判断します。目標値より大きい場合は、右ポインタを1単位左に移動する必要があることを意味します。同様に、目標値よりも小さい場合は、左ポインタが1単位右に移動します。215

したがって、完全なコードは次のとおりです。

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        left = 0
        right = len(numbers) - 1
        while left<right:
            if numbers[left]+numbers[right]==target:
                return [left+1,right+1]
            elif numbers[left]+numbers[right]<target:
                left = left +1
            else:
                right = right -1

最終実行結果
ここに画像の説明を挿入

1.3まとめ

このような質問をするには、ダブルポインタ方式の使用を検討する必要があります。そうしないと、自分の考えで答えが出ますが、leetcodeコンパイラに表示されて超出时间限制問題が発生します。

おすすめ

転載: blog.csdn.net/A33280000f/article/details/121208225