---
image: https://leetcode.com/static/images/LeetCode_Sharing.png
tags: leetcode
---
# Week.3.MID [167. Two Sum II - Input Array Is Sorted]
---
- 1維, 遞增數列, 找出1 <= index1 <= index2, 的兩個index加起來數字等於target
- 僅有一解, return [index1, index2], 不可為同一個index
---
1. 類似two sum, 將target減去數列, 搜尋另一個值, 不過有大小條件
2. 用傳統for loop 會在超大list時做到爆掉
3. 必須得用雙指針來進行
---
```python!
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
# 1維, 遞增數列, 找出1 <= index1 <= index2, 的兩個index加起來數字等於target
# 僅有一解, return [index1, index2], 不可為同一個index
# 類似two sum, 將target減去數列, 搜尋另一個值, 不過有大小條件
if not numbers: return []
# 傳統方式for loop 會出現 Time Limit Exceeded
# for index,n in enumerate(numbers):
# m = target - n
# if m == n: return [index+1, index+2]
# if m in numbers: return [index+1, numbers.index(m)+1]
# 用雙指針的方式進行, p1從頭, p2從尾
p1 ,p2 = 0, len(numbers)-1
while numbers[p1] + numbers[p2] != target: # 做到數字和與target相同
if numbers[p1] + numbers[p2] < target:
p1 += 1 # 數字和太小, 小指針往大數字走
else:
p2 -= 1 # 數字和太大, 大指針往小數字走
return [p1+1, p2+1]
```
[167. Two Sum II - Input Array Is Sorted]:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/