算法每日一题 Day07|双指针求解和为S的两个数

题目链接:https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/description/

文章目录

一、题目描述


二、解题思路

这道题的核心在于:这个数组是从小到大有序的,想到利用单调性和双指针来解题

具体思路如下:

  • 第一步:定义一个left指针指向数组的第一个元素,定义一个right指针指向数组的最后一个元素
  • 第二步:判断left和right指向的元素之和sum与目标值traget的大小;如果sum>target,就说明left右边的所有元素与right指向的元素之和都大于target,所以遇到这种情况可以让right--;如果sum<target,就让left++;如果相等就返回。

三、关键点 / 易错点

  • 容易出错的地方:这题用两个for循环的暴力解法会超时

四、代码实现(Java)

java 复制代码
class Solution {
    public int[] twoSum(int[] price, int target) {
        int n = price.length;
        int left = 0;
        int right = n-1;
        while(left<right){
            int sum = price[left]+price[right];
            if(sum>target) right--;
            else if(sum<target) left++;
            else return new int[]{price[left],price[right]};
        }
        // 为了照顾编译器,这里再给他一个返回值
        return new int[]{0};
    }
}

五、总结

第一次做的时候用了暴力解法发现时间超时,后面经过思考利用双指针解答出了这道题,希望自己能每天检查刷力扣,提升自己的思维逻辑能力。

相关推荐
从零开始的代码生活_9 分钟前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
泷寂42 分钟前
最小生成树 (MST基础)
算法
Daniel_1231 小时前
数组——总结篇
算法
不懒不懒1 小时前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart1 小时前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法
会编程的小孩2 小时前
初识数据类型以及变量定义
数据结构·算法
Reart2 小时前
Leetcode 337.打家劫舍3(717)
后端·算法
梅梅绵绵冰2 小时前
数据结构-时间复杂度
数据结构·算法
遥感知识服务2 小时前
盐碱地、白屋顶和裸土都很亮,卫星怎样分清?
人工智能·算法·机器学习
可编程芯片开发2 小时前
基于PID控制器的车辆控制系统simulink建模与仿真
算法