双指针练习:和为s的两个数字

题目链接:剑指offer 57.和为s的两个数字

题目描述:

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

示例 1:

输入:price = [3, 9, 12, 15], target = 18
输出:[3,15] 或者 [15,3]

示例 2:

输入:price = [8, 21, 27, 34, 52, 66], target = 61
输出:[27,34] 或者 [34,27]

解法一:(暴力解法,会超时):

算法思路:

两层for循环:

·外层 for 循环依次枚举第一个数a;

·内层 for 循环依次枚举第二个数b,让它与a匹配;

ps:这里有个细节;我们挑选第二个数的时候,可以不从第一个数开始选,因为a前面的数我们都已经在之前考虑过了;因此,我们可以从a往后的数开始列举。

·然后将挑选的两个数相加,判断是否符合目标值。

算法代码:

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int n = price.size();for(int i = 0; i < n; i++){for(int j = i + 1; j < n; j++){if(price[i] + price[j] == target){return {price[i],price[j]};}}}return {-1,-1};}
};

解法二(双指针-对撞指针):

算法思路:

注意到本题是升序的数组,因此可以用「对撞指针」优化时间复杂度。

算法流程:

因为本题是有序数组,由前几题经验可得我们可以使用单调性解决此题;

如果 price[left] + price [right] > target

那么 target就在两个数之间数的和(或者没有) 所以把大的变小 即右指针移动

如果 price[left] + price [right] < target

那么 target就在两个数之间数的和 (或者没有)所以把小的变大 即左指针移动

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int n = price.size();int left = 0;int right = n -1;while(left < right){if(price[left] + price[right] < target){left++;}if(price[left] + price[right] > target){right--;}if(price[left] + price[right] == target){return {price[left],price[right]};}}return {-1,-1};}
};

 

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

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

相关文章

【Windows】配置Flutter开发环境

一、下载 flutter sdk 点此跳至下载官网 下载好flutter sdk&#xff0c;并解压到自定义的位置。 二、配置环境变量 此电脑 --> 右键 选择 属性 --> 点击 高级系统设置 --> 会弹出系统属性的窗口&#xff0c;点击 环境变量 按钮 1.配置加速镜像地址 PUB_HOSTED_…

Web前端设计毕业论文:深度探索与未来展望

Web前端设计毕业论文&#xff1a;深度探索与未来展望 在数字化时代&#xff0c;Web前端设计作为互联网应用的重要组成部分&#xff0c;其重要性和复杂性日益凸显。本论文旨在深度探索Web前端设计的关键要素、发展趋势以及面临的挑战&#xff0c;为未来的研究和实践提供有价值的…

【python】python指南(四):typing静态类型注解综述

一、引言 对于算法工程师来说&#xff0c;语言从来都不是关键&#xff0c;关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言&#xff0c;实习的时候做一个算法策略后台用的是php&#xff0c;毕业后做策略算法开发&#xff0c;因为要用spark&#x…

大话C语言:第24篇 预处理

1 C语言编译流程 C语言的编译流程包括&#xff1a; 预编译&#xff1a;将.c 中的头文件展开、宏展开&#xff0c;生成的文件是.i 文件。gcc指令&#xff1a;gcc -E file.c -o file.i 编译&#xff1a;将预处理之后的.i 文件生成 .s 汇编文件。gcc指令&#xff1a;gcc -S file…

Java课设项目

项目简介:射击生存类小游戏 项目采用技术: 游戏引擎: Unity 编程语言: Java 图形处理: NVIDIA PhysX (物理引擎), HDRP (High Definition Render Pipeline) 音效与音乐: FMOD, Wwise 版本控制: Git 功能需求分析: 角色控制&#xff1a;玩家能够使用键盘和鼠标控制角色移动、…

AI影像时代来临,联发科天玑以专业无畏精神重新定义手机专业影像

近期&#xff0c;联发科与Discovery探索频道联合举办了一场以“越极境&#xff0c;见芯境”为主题的天玑影像展&#xff0c;活动地点位于我国桂林阳朔。活动现场展示了阳朔壮美山水的画卷&#xff0c;以及救援队员在岩壁上进行训练的极限瞬间。令人意想不到的是&#xff0c;这些…

【课程系列01】某乎的AI大模型全栈工程师-第4期

网盘链接 链接&#xff1a;https://pan.baidu.com/s/1QLkRW_DmIm1q9XvNiOGwtQ --来自百度网盘超级会员v6的分享 课程目标 AI大模型全栈工程师是指具备人工智能领域全方位能力的工程师&#xff0c;特别是在大模型开发和应用方面具有深厚的专业知识和技能。以下是关于AI大模型…

第12章.STM32标准库简介

目录 0. 《STM32单片机自学教程》专栏 12.1 CMSIS 标准 12.2 STM32标准库文件结构 12.2.1 主结构 12.2.2 Libraries固件库文件 CMSIS文件夹 1.core_cm3.c&core_cm3.h 2.startup启动文件 3.Stm32f10x.h 4.system_stm32f10x.c&system_stm32f10…

Linux常用命令及或g++(或gcc)编辑器运用

一. 实验内容 1&#xff0e;打开VMware Workstation虚拟机进入Ubuntu系统&#xff0c;打开终端。 练习使用常用的Linux命令&#xff0c;主要包括如下命令&#xff1a; mkdir, rmdir, cd, pwd, ls, clear, cat, rm等。&#xff08;其中&#xff0c;cat、rm命令请在下面实验内容3…

IIC通信总线

文章目录 1. IIC总线协议1. IIC简介2. IIC时序1. 数据有效性2. 起始信号和终止信号3. 数据格式4. 应答和非应答信号5. 时钟同步6. 写数据和读数据 2. AT24C023. AT24C02读写时序4. AT24C02配置步骤5. 代码部分1. IIC基本信号2. AT24C02驱动代码3. 实验结果分析 1. IIC总线协议 …

C#中数组ProtoBuf使用问题

使用 C# 类库 Google.Protobuf 包&#xff0c;进行协议定义&#xff0c;当给数组属性赋值默认值时&#xff0c;出现反序列化以后&#xff0c;数组长度翻倍&#xff0c;多的一部分在最前面&#xff0c;而且都是数组元素的默认值 Code: // 类定义 [ProtoContract] public class…

大厂笔试真题讲解—美团23年—小美的字符串变换

本题主要讲解小美的字符串变换的要点和细节&#xff0c;根据步骤一步步思考方便理解 提供c的核心代码以及acm模式代码&#xff0c;末尾 题目描述 小美拿到了一个长度为 n 的字符串&#xff0c;她希望将字符串从左到右平铺成一个矩阵&#xff08;先平铺第一行&#xff0c;然后是…

【使用python如何获取excel中sheet页的样式】

在Python中&#xff0c;要获取Excel文件中sheet页的样式&#xff08;如字体、颜色、边框等&#xff09;&#xff0c;你通常会使用openpyxl&#xff08;用于处理.xlsx文件&#xff09;或xlrd和xlwt&#xff08;用于处理较旧的.xls文件&#xff0c;但xlrd的新版本已不再支持.xlsx…

【C++提高编程-05】----C++之Deque容器实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

MySQL的三种重要的日志

日志 Mysql有三大日志系统 Undo Log&#xff08;回滚日志&#xff09;&#xff1a;记录修改前的数据&#xff0c;用于事务回滚和 MVCC&#xff08;多版本并发控制&#xff09;。 Redo Log&#xff08;重做日志&#xff09;&#xff1a;记录数据变更&#xff0c;用于崩溃恢复&…

【java】指定类,指定package,找到package下面,这个类的所有子类

目录 ■java代码 ■注意 ■运行效果 ■包的结构 ■java代码 package com.sxz.study.reflect;import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List;public class …

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进…

树莓派等Linux开发板上使用 SSD1306 OLED 屏幕,bullseye系统 ubuntu,debian

Raspberry Pi OS Bullseye 最近发布了,随之而来的是许多改进,但其中大部分都在引擎盖下。没有那么多视觉差异,最明显的可能是新的默认桌面背景,现在是大坝或湖泊上的日落。https://www.the-diy-life.com/add-an-oled-stats-display-to-raspberry-pi-os-bullseye/ 通过这次操…

Spring中获取bean的三种常用方式

在Spring框架中&#xff0c;一个bean是指由SpringIOC容器管理的一个Java对象。Spring提供了一种依赖注入的机制&#xff0c;可以通过在配置文件中配置bean的定义&#xff0c;实现在代码中通过IOC容器获取bean的实例。 方法一 根据名称获取Bean public class App {public sta…