Leetcode面试题Day11|LeetCode167 两数之和Ⅱ

题目1:

指路:

. - 力扣(LeetCode)167 两数之和Ⅱ

思路与分析:

在一个数组中找到两个数使其和为给定的目标值。我们首先考虑双指针的思路,因为给出的数组为非递减因此我们无需排序直接定义指向即可。定义一个左指针指向数组的首元素,一个右指针指向数组的尾元素,当左右指针有效时,保存当前得到的现有值,也就是两个指针对应在数组中的和,之后,这里又分为三种情况。其一为得到的和与目标值相等,那么直接返回左右指针+1,注意:这里不是返回左右指针,因为给出的下标从1开始而非0,而样例中的[1, 2]和[1, 3]也很好地证明了这一点。

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int n = numbers.size();
        int left = 0, right = n - 1;
        while (left < right) {
            // 得到现有的匹配值
            int match = numbers[left] + numbers[right];
            if (match == target) {
                return {left + 1, right + 1};
            } else if (match < target) {
                // 目标在现有值右边,缩小左范围
                ++left;
            } else {  // 目标在现有值左边,缩小右范围
                --right;
            }
        }
        return {-1, -1};
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C.G.道枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值