68. Two Sum II - Input array is sorted
🎯 leetcode - 167. Two Sum II - Input array is sorted
🤔 私の答え
📌 質問する
📌 一つ.バイナリ検索を使用して残りの値を決定
スライドは高速で便利なモジュールですが、過度のスライドはかえって速度低下の元凶になります.必要な場所だけ使用!
🤔 私の答え
📌 質問する
- 파이썬 알고리즘 인터뷰 68번 문제
📌 名前の日付2020.03.01
📌 試行回数3 try
💡 Codeclass Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left, right = 0, len(numbers) - 1
while left < right:
cal_sum = numbers[left] + numbers[right]
if cal_sum > target:
right -= 1
elif cal_sum < target:
left += 1
else:
return left + 1, right + 1
💡 トラブルシューティング方法0. 이미 정렬된 배열이므로 투 포인터를 사용할 수 있다.
1. left는 0에서, right는 len(numbers)-1 에서 시작한다.
2. cal_sum은 left, right가 위치하고 있는 값의 합이다.
3-1. cal_sum이 target보다 크면...
값을 줄여줘야 되니까 right -= 1
3-2. cal_sum이 target보다 작으면...
값을 키워야 되니까 left += 1
3-3. cal_sum == target이면...
return (left + 1, right + 1) # 문제에서 1에서부터 시작하는 인덱스라고 했다~
💡 新知-
答えを間違える理由-
😉 別の解釈📌 一つ.バイナリ検索を使用して残りの値を決定
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
for idx, cur_num in enumerate(numbers):
expected = target - cur_num
left, right = idx + 1, len(numbers) - 1
while left <= right:
mid = left + (right - left) // 2
if numbers[mid] < expected:
left = mid + 1
elif numbers[mid] > expected:
right = mid - 1
else:
return idx + 1, mid + 1
💡 トラブルシューティング方法- 첫번째 숫자는 for문으로 앞에서부터 차례대로 접근하고,
첫번째 숫자에 두번째 숫자를 더했을 때 target이 되어야 하므로 두번째 숫자는
>> expected = target - (cur_num) 이되어야 한다.
- 그리고 두번째 숫자(expected)가 나머지 범위 안에 있는지를 이진 검색으로 판별한다.
📌 二.スライスなしスライドは高速で便利なモジュールですが、過度のスライドはかえって速度低下の元凶になります.必要な場所だけ使用!
import bisect
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
for idx, cur_num in enumerate(numbers):
expected = target - cur_num
i = bisect.bisect_left(numbers, expected, idx + 1) # 현재 cur_num의 [idx+1~끝] 범위에 target이 있는지 검사
if i < len(numbers) and numbers[i] == expected: # 만약 target이 존재하면
return idx + 1, i + 1
💡 トラブルシューティング方法- 첫번째 숫자는 for문으로 앞에서부터 차례대로 접근하고,
첫번째 숫자에 두번째 숫자를 더했을 때 target이 되어야 하므로 두번째 숫자는
>> expected = target - (cur_num) 이되어야 한다.
- 그리고 두번째 숫자(expected)가 나머지 범위 안에 있는지를 이진 검색으로 판별한다.
💡 新知- bisect_left(a, x, lo = 0, hi = len(a))
1. lo는 왼쪽 범위를 제한한다.
2. hi는 오른쪽 범위를 제한한다.
Reference
この問題について(68. Two Sum II - Input array is sorted), 我々は、より多くの情報をここで見つけました https://velog.io/@eunseokim/68.-Two-Sum-II-Input-array-is-sortedテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol