合計がsになる2つの数値
配列と数値sを昇順で入力し、それらの合計が正確にsになるように配列内の2つの数値を見つけます。数値の複数のペアの合計がsに等しい場合は、任意のペアを出力します。
- ハッシュテーブルを使用でき、時間と空間の複雑さはすべてO(N)です。
- ダブルポインター(ヘッドポインターとテールポインター)、時間計算量O(N)、空間計算量O(1)
- 二分法、時間計算量O(logN)、空間計算量O(1)
ダブルポインター
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
双指针,从2边到中间
i, j = 0, len(nums) - 1
sum_ = nums[i] + nums[j]
while i < j:
if sum_ < target:
i+=1
sum_ = nums[i] + nums[j]
if sum_ > target:
j-=1
sum_ = nums[i] + nums[j]
if sum_ == target:
return([nums[i], nums[j]])
return([])