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

【力扣】查找总价格为目标值的两个商品,双指针法

查找总价格为目标值的两个商品原题地址

方法一:双指针

这道题和力扣第一题“两数之和”非常像,区别是这道题已经把数组排好序了,所以不考虑暴力枚举和哈希集合的方法,而是利用单调性,使用双指针求解

考虑数组 price 的 2 个下标 left 和 right ,对于 [left,right] ,有 C_{right-left+1}^{2} 种配对方法,我们需要利用单调性剔除一些可能

不妨设 price[left]+price[right]<target ,考虑 [left+1,right-1] 范围内的下标(记为 m ),有 price[left]+price[m]<price[left]+price[right]<target ,所以 left 不可能与 [left+1,right] 的任何下标配对,此时让 left 右移,在 [left+1,right] 的范围内寻找配对。同理,若 price[left]+price[right]>target ,考虑 right 和 [left+1,right-1] 范围内的下标(记为 n ),有 price[right]+price[n]>price[right]+price[left]>target ,所以 right 不可能与 [left,right-1] 的任何下标配对,此时让 right 左移,在 [left,right-1] 的范围内寻找配对

反复执行上述操作,直到 left=right 或者找到符合 price[left]+price[right]=target 的配对。

// 方法一:双指针
class Solution
{
public:vector<int> twoSum(vector<int>& price, int target){int left = 0, right = price.size() - 1;while (left < right){if (price[left] + price[right] < target){++left;}else if (price[left] + price[right] > target){--right;}else{return { price[left], price[right] };}}return {};}
};

方法二:哈希表

如果数组没有排好序呢?参考【力扣】两数之和,暴力枚举 + 哈希表的思路,其中暴力枚举会超时,这里附上本题的哈希表解法。

// 方法二:哈希表(适用于数组未排序的情况)
class Solution
{
public:vector<int> twoSum(vector<int>& price, int target){unordered_set<int> us;for (int i = 0; i < price.size(); ++i){// 哈希表中有元素与之匹配auto it = us.find(target - price[i]);if (it != us.end()){return { *it, price[i] };}// 存入哈希表us.insert(price[i]);}return {};}
};

相关文章:

  • Mac 下JDK环境变量配置 及 JDK多版本切换
  • 吉他学习:识谱,认识节奏,视唱节奏,节拍器的使用
  • 2402d,d的静态构造器
  • 多线程基础详解(看到就是赚到)
  • 预测模型:MATLAB线性回归
  • 在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程
  • K8S之Pod常见的状态和重启策略
  • 人工智能之无约束最优化与有约束最优化
  • C# Task的使用
  • 编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本
  • python二维数组初始化的一个极其隐蔽的bug(浅拷贝)
  • Win32 SDK Gui编程系列之--ListView自绘OwnerDraw(续)
  • 幻兽帕鲁(Palworld)允许自建私服,它是怎么挣钱的呢?
  • 融资项目——配置redis
  • Go语言每日一练——链表篇(四)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【刷算法】求1+2+3+...+n
  • chrome扩展demo1-小时钟
  • EventListener原理
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • ng6--错误信息小结(持续更新)
  • PaddlePaddle-GitHub的正确打开姿势
  • 大快搜索数据爬虫技术实例安装教学篇
  • 今年的LC3大会没了?
  • 跨域
  • 如何学习JavaEE,项目又该如何做?
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (C++20) consteval立即函数
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)Sublime Text3配置Lua运行环境
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 流——流的类型体系简单介绍
  • .NET企业级应用架构设计系列之技术选型
  • @Documented注解的作用
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [20171101]rman to destination.txt
  • [20190113]四校联考
  • [2021 蓝帽杯] One Pointer PHP
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [COI2007] Sabor
  • [CSS]文字旁边的竖线以及布局知识
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [iOS]随机生成UUID通用唯一识别码
  • [LVGL]:MACOS下使用LVGL模拟器
  • [Matlab有限元分析] 2.杆单元有限元分析
  • [No000016]为什么假期计划总是做不到?
  • [P4V]Perforce(P4V)使用教程
  • [PyTorch][chapter 66][强化学习-值函数近似]
  • [SAP ABAP开发技术总结]面向对象OO
  • [SystemVerilog]常见设计模式/实践