leetcode-167:两数之和 II - 输入有序数组

简介: leetcode-167:两数之和 II - 输入有序数组

题目

题目链接

给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length

你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

解题

这道题其实和leetcode-1:两数之和几乎没什么差别,区别就是在于输出的下标从1开始,和 递增序列。就是说更想让你们通过双指针的方式来实现。哈希表则是两题都可以使用的方法。

方法一:哈希表

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        hush ={}
        for i,num in enumerate(numbers):
            if target-num in hush:
                return [hush[target-num]+1,i+1]
            hush[num]=i

方法二:双指针

python解法

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        left = 0
        right = len(numbers)-1
        while left<right:
            if numbers[left]+numbers[right]==target:   # 如果相等,那么返回
                return [left+1,right+1] 
            elif numbers[left]+numbers[right]<target:  # 如果比目标小,left+1
                left+=1
            else :                                     # 如果比目标大,right-1
                right-=1

C++解法

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int left=0,right=numbers.size()-1;
        while(left<right){
            if(numbers[left]+numbers[right]==target){
                return {left+1,right+1};
            }
            else if(numbers[left]+numbers[right]<target){
                left++;
            }
            else{
                right--;
            }
        }
        return {};
    }
};
相关文章
|
1月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
1月前
|
存储 C语言
【C语言】Leetcode 88.合并两个有序数组
【C语言】Leetcode 88.合并两个有序数组
25 0
【C语言】Leetcode 88.合并两个有序数组
|
1月前
|
存储
【合并两个有序数组】LeetCode第88题讲解
【合并两个有序数组】LeetCode第88题讲解
|
11天前
【力扣】80.删除有序数组中的重复项Ⅱ
【力扣】80.删除有序数组中的重复项Ⅱ
|
24天前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
1月前
|
机器学习/深度学习 算法 索引
leetcode热题100.两数之和
leetcode热题100.两数之和
13 1
|
1月前
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
|
1月前
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
|
1月前
|
C语言
【C语言】Leetcode 两数之和 (含详细题解)
【C语言】Leetcode 两数之和 (含详细题解)
83 0
|
2月前
|
存储 算法 Go
LeetCode 第一题: 两数之和
  给定一个整数数组 `nums`​ 和一个目标值 `target`​,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组索引。\ 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
LeetCode 第一题: 两数之和