タイトル
所定の規則配列は、それらの和が目標数の和に等しくなるように2つの数値を見つけるために応じて昇順にソートされています。
機能はindex1のINDEX2未満でなければならない2つの指標値からindex1 INDEX2を返す必要があります。
説明:
インデックス値(インデックス1、INDEX2をして)返し、ゼロではありません。
あなたは、各入力のみ唯一の答えに対応すると仮定することができますが、同じ要素を再利用することはできません。
例:
入力:番号= 2、7、 11、15]、目標= 9
出力:[1,2]
説明:2および7は、ターゲット番号9の和に等しいです。従って= 1、INDEX2 = 2をINDEX1。
出典:ボタン(LeetCode)滞在
:リンクhttps://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
すべてのネットワークからの控除が著作権を保有します。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。
解決策1:ダブルポインタ
考え
主要是在头尾各设置一个指针,然后进行求和,如果大于,则尾指针减一;如果小于,则头指针加一;否则,输出索引值
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
length = len(numbers)
right = length - 1
left = 0
while left < right:
if numbers[left] + numbers[right] == target:
return [left+1, right+1]
elif numbers[left] + numbers[right] > target:
right -= 1
else:
left += 1
対処方法2:バイナリ検索
考え
定义一个函数,用于二分查找,有五个参数,分别代表self,number,left,right,target,
最初に中間点、中間点を見つける:限り左が右よりも小さいように、サイクル運転を行うことができ、ループの設定
値と目標を比較し、それが正しい=中間、より大きい、そうでなければ、左=ミッド+ 1、次いで場合は、ターゲットとして、そして返す
そうでない場合は、左に戻っ-1マーキングのために。次に、ループの終わりに左、実行