【算法专题突破】双指针 - 和为s的两个数字(6)

简介: 【算法专题突破】双指针 - 和为s的两个数字(6)

1. 题目解析

题目链接:剑指 Offer 57. 和为s的两个数字 - 力扣(Leetcode)

这道题题目就一句话但是也是有信息可以提取的,

最重要的就是开始的那句话,“递增序列”

然后在数组中找出两个和为s的数即可(而且是任意一对即可)

2. 算法原理

这道题很简单,如果用暴力枚举直接两层for循环搞定就行,

但是使用暴力解法的话,就没有利用到他是有序序列的这个特性了。

看到有序一般我们会想到用二分法,但是二分比较难写,

所以我就打算利用单调性使用双指针来解这道题:

我们用 left 指针指向左边,right 指针指向右边,然后开始操作:

sum 是 left + right 的值,

如果:sum < target ,就让 left 指针右移找更大的数

如果:sum > target ,就让 right 指针左移找更小的数

如果:sum == target ,返回结果即可。

3. 代码编写

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        vector<int> ans;
        while(left < right) {
            int sum = nums[left] + nums[right];
            if(sum < target) left++;
            else if(sum > target) right--;
            else {
                ans.push_back(nums[left]);
                ans.push_back(nums[right]);
                break;
            }
        }
        return ans;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
5月前
|
算法
双指针算法
双指针算法
31 2
|
2月前
|
算法 索引 容器
双指针算法详解
本文介绍了双指针算法及其应用。双指针算法是在数组或字符串中常用的高效技术,通过维护两个指针遍历数据结构以解决特定问题。根据指针移动方向,可分为同向双指针、相向双指针和快慢指针。同向双指针如移动零和复写零问题;快慢指针如快乐数问题;相向双指针如盛水最多的容器、有效三角形数量及多数之和等问题。通过合理运用双指针技巧,可简化代码并提高效率。
60 4
双指针算法详解
|
5月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
1月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
3月前
|
算法 容器
【算法】双指针
【算法】双指针
|
3月前
|
算法 C++ 容器
【C++算法】双指针
【C++算法】双指针
|
6月前
|
算法
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
|
6月前
|
存储 人工智能 算法
c++算法学习笔记 (9) 双指针
c++算法学习笔记 (9) 双指针
|
6月前
|
算法
[优选算法]——双指针——Leetcode——1089. 复写零
[优选算法]——双指针——Leetcode——1089. 复写零