力扣167. 两数之和 II - 输入有序数组#
数学解法#
1. 符号定义#
| 符号 | 释义 |
|---|---|
| n | 数组长度 |
| a_i | 索引 i 处的元素(0 \le i \lt n) |
| T | 目标值 target |
| l | 左指针,初值 l = 0 |
| r | 右指针,初值 r = n - 1 |
| S | 当前指针元素和:S = a_{l} + a_{r} |
2. 迭代公式#
\begin{cases} S = T \implies \text{返回 } [l+1,\, r+1] \\\ S \lt T \implies l \leftarrow l + 1 \\\ S \gt T \implies r \leftarrow r - 1 \end{cases}
循环约束: l \lt r
##作者:灵茶山艾府
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left = 0
right = len(numbers) - 1
while True:
s = numbers[left] + numbers[right]
if s == target:
return [left + 1, right + 1] # 题目要求下标从 1 开始
if s > target:
right -= 1
else:
left += 1
##个人解法
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
for k,v in enumerate(numbers):
if target-v in numbers[k+1:]:
return [k+1,numbers[k+1:].index(target-v)+k+2]
return []
原创
algorithm-004
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法