当前位置: 首页 > news >正文

双指针---和为s的两个数字

这里写自定义目录标题

  • 题目链接
  • 问题分析
  • 代码解决
  • 执行用时

题目链接

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。
在这里插入图片描述

问题分析

暴⼒解法,会超时
(两层 for 循环列出所有两个数字的组合,判断是否等于⽬标值。)

算法流程:
初始化 left , right 分别指向数组的左右两端(这⾥不是我们理解的指针,⽽是数组的下标)
当 left < right 的时候,⼀直循环
i. 当 nums[left] + nums[right] == target 时,说明找到结果,记录结果,并且返回;
ii. 当 nums[left] + nums[right] < target 时:

• 对于nums[left] ⽽⾔,此时 nums[right] 相当于是 nums[left] 能碰到的最⼤值(别忘了,这⾥是升序数组哈~)。如果此时不符合要求,说明在这个数组⾥⾯,没有别的数符合 nums[left] 的要求了(最⼤的数都满⾜不了)。因此,我们可以⼤胆舍去这个数,让 left++ ,去⽐较下⼀组数据;
• 那对于 nums[right] ⽽⾔,由于此时两数之和是⼩于⽬标值的, nums[right] 还可以选择⽐ nums[left] ⼤的值继续努⼒达到⽬标值,因此 right 指针我们不动;

iii. 当 nums[left] + nums[right] > target 时,同理我们可以舍去nums[right] (最⼩的数都满⾜不了)。让 right-- ,继续⽐较下⼀组数据,⽽left 指针不变(还是可以去匹配⽐ nums[right] 更⼩的数的)。

与上一题思路类似

代码解决

class Solution {public int[] twoSum(int[] price, int target) {int left = 0,right = price.length-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};}
}

执行用时

在这里插入图片描述

http://www.lryc.cn/news/506790.html

相关文章:

  • LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct
  • 智慧农业云平台与水肥一体化:道品科技引领农业现代化新潮流
  • 241207_MindNLP中的大模型微调
  • MongoDB、Mongoose使用教程
  • 单片机:实现控制步进电机正反转(附带源码)
  • 安装指南|OpenCSG Starship上架GitHub Marketplace
  • Excel设置生日自动智能提醒,公式可直接套用!
  • 同步异步日志系统:前置知识
  • 微服务设计原则——功能设计
  • 低代码软件搭建自学的第一天——熟悉PyQt
  • 基于Python3编写的Golang程序多平台交叉编译自动化脚本
  • 远程桌面连接
  • 网络地址转换NAT
  • 什么是CRM管理软件?CRM的基本概念、功能、选择标准、应用场景
  • Python编程常用的19个经典案例
  • 【Unity基础】AudioSource 常用方法总结
  • CSS系列(25)-- 滚动优化详解
  • CST天线设计的六大核心特点:为天线分析提供完整解决方案!
  • Ubuntu下C语言操作kafka示例
  • 怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法
  • HTTP接口报错详解与解决 200,500,403,408,404
  • 监控IP频繁登录服务器脚本
  • 分布式链路追踪-03-Jaeger、Zipkin、skywalking 中的 span 是如何设计的?
  • 【达梦数据库】获取对象DDL
  • InnoDB和MyISAM引擎优缺点和区别
  • 文件上传知识点汇总
  • 计算机网络技术基础:5.数据通信系统
  • 光谱相机在农业的应用
  • 高考志愿填报:如何制定合理的志愿梯度?
  • Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)