吴师兄学算法day07 167. 两数之和 II - 输入有序数组
题目:167. 两数之和 II - 输入有序数组
易错点:
- 下标为1开始
我的代码:
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
right = len(numbers) -1
left = 0
while left < right:
ans = numbers[left]+numbers[right]
if ans > target: # 大于 右边的往里面缩小
right -=1
elif ans < target: # 小于 左边的扩大
left +=1
else:
return [left+1,right+1] # 题目说下标为1,所以结果都加1
老师的代码:
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
# 初始结果数组
res = [0, 0]
# 定义左侧指针left,指向数组中第一个元素
# 默认从数组的索引为 0 的位置开始
left = 0
# 定义右侧指针 right,指向数组中最后一个元素
right = len(numbers) - 1
# 两个索引向内移动
# left 向右移动
# right 向左移动
while left < right:
# 1、如果左侧指针与右侧指针所指向的元素和等于目标值,则返回结果
if numbers[left] + numbers[right] == target:
# 题目说明下标从 1 开始,就操作一下
res[0] = left + 1
res[1] = right + 1
# 返回结果
return res
# 2、如果左侧指针与右侧指针所指向的元素和小于目标值
elif numbers[left] + numbers[right] < target:
# 因为数组是升序排列的,为了让两数之和变大一些
# 因此应将左侧指针向右移动一位
left += 1
# 3、如果左侧指针与右侧指针所指向的元素和大于目标值
elif numbers[left] + numbers[right] > target:
# 因为数组是升序排列的,为了让两数之和变小一些
# 因此应将右侧指针向左移动一位
right -= 1
# 返回结果
return res
扩展写法:
总结:
- 老师这个题,没我写的好
- QQSS
参考:
https://r07na4yqwor.feishu.cn/docx/GhfkdsrOqopiJCxg3AucaphtnQf