(更新する)、ダブルポインタとバイナリ検索をLeecode

タイトル

所定の規則配列は、それらの和が目標数の和に等しくなるように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マーキングのために。次に、ループの終わりに左、実行

おすすめ

転載: www.cnblogs.com/michealjy/p/11279412.html