LCR 179. 查找总价格为目标值的两个商品 - 力扣

news2024/11/15 8:08:22

1. 题目

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

2. 示例

3. 分析 

我们首先想到暴力解法,这道题目的暴力还是比较简单的,列举每个数的情况即可:

for(int i = 0; i < pricee.size(); i++)
    for(int j = i + 1; j < price.size(); j++)
        check(pirce[left], price[right]);// 判断

 暴力解法在这道题目中会超时,所以放弃这个解法。


题目有说明为递增数组,所以可以利用单调性+双指针解决。跟611. 有效的三角形个数为一类题目。

解题方法:

先定义两个指针指向数组左右,它们的和有三种情况:

  • sum > target
    price[right]为数组内的最大值,price[left]为最小,所以此时[left+1, right-1]这个区间的数分别加上price[right]的和是肯定会超过target的,因为题目已经说明数组为递增的最小加上最大都大于target,所以price[left] (最小)右边区间的数也肯定会大于target了。所以直接舍弃掉此时的最小值,再left++即可。
  • sum < target
    price[right]为数组内的最大值,price[left]为最小,所以此时[left+1, right-1]这个区间的数分别加上price[left]的和是肯定不会超过target的,因为题目已经说明数组为递增的,最小加上最大都没有大于target,所以price[right] (最大)左边区间的数也肯定会小于target了。所以直接舍弃掉此时的最大值,再right--即可。
  • sum == target
    返回结果即可

class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target) {
        int left = 0, right = price.size()-1;
        while (left < right)
        {
            int sum = price[left] + price[right];
            if (sum > target) right--;
            else if (sum < target) left++;
            else return {price[left], price[right]};
        }
        return {-1, -1};// 题目莫得要求无结果需返回什么,所以随便返回两个负数即可
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【嵌入式】字体极限瘦身术:Fontmin在嵌入式UI中的魔法应用(附3500常用汉字)

1. 概述 在嵌入式系统的用户界面&#xff08;UI&#xff09;设计中&#xff0c;字体的选择和优化至关重要。一个恰当的字体不仅能够提升用户体验&#xff0c;还能彰显产品特色。然而&#xff0c;由于嵌入式设备常常受限于存储空间和处理能力&#xff0c;大型字体文件可能成为性…

HTML 学习笔记(四)图片

<!--通过图片标签"<img src "图片路径">"来调用图片在网页中进行显示--> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthd…

基于Leatlet标注Geojson下载器实现

在上一篇文章中&#xff0c;我们学习了Leaflet的基础知识&#xff0c;包括如何创建地图、添加图层等。在本文中&#xff0c;我们将深入学习Leaflet中标注的创建和管理&#xff0c;包括如何添加标注、自定义标注图标、创建图层组、批量添加和删除标注、为标注添加属性和弹出框等…

Spring Boot工作原理

Spring Boot Spring Boot 基于 Spring 开发&#xff0c;Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说&#xff0c;它并不是用来替代 Spring 的解决方案&#xff0c;而是和 Spr…

HTML5基础2

drag 可以把拖放事件拆分成4个步骤 设置元素为可拖放。为了使元素可拖动&#xff0c;把 draggable 属性设置为 true 。 <img draggable"true"> 拖动什么。ondragstart 和 setData() const dragestart (ev)>{ev.dataTransfer.setData(play,ev.target.id)} …

码垛【FB块】

转载&#xff1a; FUNCTION BLOCK 码垛 VAR INPUT 当前数:INT; 点l:Point; 点2:Point; X行数:REAL; Y列数:REAL; 2层数:REAL; END VAR VAR OUTPUT 目标点:Point; 点数量:INT; END VAR VAR // X差值:点2.x-点1.x; IF X行数>1 AND X差值<>0 THEN X间隔:X差值/(X行数-1)…

vue结合vue-electron创建应用程序

这里写自定义目录标题 安装electron第一种方式&#xff1a;vue init electron-vue第二种方式&#xff1a;vue add electron-builder 启动electron调试功能&#xff1a;background操作和使用1、覆盖窗口的菜单上下文、右键菜单2、监听关闭事件、阻止默认行为3、创建悬浮窗口4、窗…

2024想要赚点小钱真的很容易!帮你们找的10个搞钱第二职业

我们都希望在空闲时间里增加一些额外收入&#xff0c;并有机会找到自己热爱的事业&#xff0c;每天贝兼几十上百元是一个不错的开始&#xff0c;小钱也是钱&#xff0c; 搞钱的经验会积少成多。今天分享10个搞钱第二职业&#xff0c;2024想要赚点小钱真的很容易。 一.摆摊卖花 …

计算机找不到msvcr120.dll的五种修复方法,轻松搞定msvcr120.dll丢失问题

当计算机系统中msvcr120.dll文件丢失时&#xff0c;可能会引发一系列运行问题和故障现象。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多Windows应用程序的正常运行至关重要。由于msvcr120.dll是许多软件在运行过程中依赖的重要动态链…

blender怎么导入stl格式文件?

stl格式&#xff0c;一般是用来3D打印用的文件&#xff0c;这种模型一般很小&#xff0c;经常做来做一些DIY的配件&#xff0c;如下图&#xff0c;一共有七八个模型&#xff0c;3D打印机把每个模型实体打出来后&#xff0c;就可以给小朋友组装当智益玩具玩了&#xff0c;我们把…

前端面试练习24.3.8

防抖和节流 防抖&#xff08;Debouncing&#xff09;&#xff1a; 防抖是指在短时间内连续触发同一事件时&#xff0c;只执行最后一次触发的事件处理函数。 在实际应用中&#xff0c;常常用于处理用户输入的搜索框或者滚动事件。例如&#xff0c;当用户连续输入搜索关键词时&am…

基于SpringBoot校园失物招领系统的设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

python基础9_序列类型

回顾: 什么是变量?,有什么用? 可以变化的量, 就是个容器,多次变化,方便后续使用, 前面介绍了哪些数据类型? bool, str, int, float 用什么函数查看数据的类型? a "hello" print(type(a)) 到了这一步,,我们认识了哪些数据类型呢? int 整型(整数), float…

Python快速入门系列-1

Python快速入门系列 第一章: Python简介1.1 Python的历史与发展1.2 Python的优势与特点1.2.1 易学易用1.2.2 动态类型1.2.3 丰富的标准库与第三方库1.2.4 面向对象与函数式编程1.2.5 广泛应用领域 1.3 Python的应用领域 第一章: Python简介 1.1 Python的历史与发展 Python是一…

IRLINK(红外遥控器)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 红外遥控&#xff1a;是利用红外线进行通信的设备&#xff0c;由红外LED调制后的信号发出&#xff0c;由专用的红外接头进行解调&#xff1b; 通信方式&#xff1a;单工、异步&#xff1b; 红外LED波长&#x…

【JavaEE进阶】 @Transactional详解

文章目录 &#x1f343;前言&#x1f332;rollbackFor&#xff08;异常回滚属性&#xff09;&#x1f384;事务隔离级别&#x1f6a9;MySQL事务隔离级别&#x1f6a9;Spring事务隔离级别 &#x1f38b;Spring事务传播机制&#x1f6a9;什么是事务传播机制&#x1f6a9;事务有哪…

一大波你可能不知道的 Linux 网络工具

如果要在你的系统上监控网络&#xff0c;那么使用命令行工具是非常实用的&#xff0c;并且对于 Linux 用户来说&#xff0c;有着许许多多现成的工具可以使用&#xff0c;如&#xff1a;nethogs, ntopng, nload, iftop, iptraf, bmon, slurm, tcptrack, cbm, netwatch, collectl…

SMT32 TIM1 PWM(发送固定脉冲数)步进电机梯形图加速

&#xff08;因为电机的启停惯性和步进电机越慢扭力越大的原因&#xff09;&#xff1b;所以步进电机使用梯形加速&#xff0c;可以实现更小的丢步 思路&#xff1a;在PWM中断中做计数&#xff0c;前20个脉冲和后20个脉冲频率设置一样低&#xff0c;中间的脉冲频率设置快一点

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(3)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

java-新手笔记(线程篇)

线程 线程是操作系统能进行算法调度的最小单位&#xff0c;它被包含在进程中&#xff0c;是进程中的实际操作单位。程序员可以通过线程进行多处理器编程&#xff0c;使用多线程对运算密集型任务提速. 线程的生命周期与状态&#xff1a;线程具有新建&#xff08;New&#xff0…