算法每日一题 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};
    }
}

五、总结

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

相关推荐
2601_956121972 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
兴通物联科技3 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
月华路6 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
我想走路带风6 小时前
LRU和最长前缀和(计算机网络算法)
计算机网络·算法
M78佐菲6 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
徐小夕8 小时前
表格、文档、甘特、大屏、表单一站打通:pxcharts超级表格4.0正式上线!
前端·算法·github
TechLee8 小时前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法
月华路10 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法
万法若空10 小时前
排列组合恒等式
c++·算法