ブラシの質問のウェブサイト: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]
解释:2 与 7 之和等于目标数 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単位右に移動します。2
15
したがって、完全なコードは次のとおりです。
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コンパイラに表示されて超出时间限制
問題が発生します。