目录

1.题目链接:LCR179.查找总价格为目标值的两个商品

2.题目描述:

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

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


1.题目链接:LCR179.查找总价格为目标值的两个商品

2.题目描述:
 

购物车内的商品价格按照升序记录于数组 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]

提示:

  • 1 <= price.length <= 10^5
  • 1 <= price[i] <= 10^6
  • 1 <= target <= 2*10^6

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

解法思路:

两层for循环列出所有两个数的组合,判断是否等于目标值。

算法流程:两个for循环

  1. 外层for循环依次枚举第一个数a;
  2. 内存for循环依次枚举第二个数b,让它和a匹配;(这里我们可以有个小优化,我们挑选第二个数的时候,可以不从第一个数开始选,因为a前面的数我们都已经在之间考虑过了;因此,我们可以从a往后的数开始枚举)
  3. 然后将挑选的两个数相加,判断是否符合目标值
class Solution
{
public:vector<int> twoSum(vector<int>& nums, int target){int n = nums.size();for (int i = 0; i < n; i++){for (int j = i + 1; j < n; j++){if (nums[i] + nums[j] == target)return { nums[i],nums[j] };}}return { -1,-1 };}
};

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

算法思路:

注意到本题是升序的数组,因此我们可以用对象指针优化时间复杂度

算法流程(附带算法分析,为什么可以使用对撞指针):

  1. 初始化left,right分别指向数组的左右两端(我们这里所说的指针其实是数组的小标)
  2. 当left < right 的时候,一直循环                                                                                        当num[left] + num[right] == target时,说明找到结果,记录结果,并且返回;                当num[left] + num[right] < target时:                                                                            对于num[left]而言,此时nums[right]相当于nums[left]能碰到的最大值(注意:这里是升序数组)。如果此时不符合要求,说明在这个数组里面没有别的数符合num[left]的要求了(最大的数都满足不了你,你已经没救了)。因此我们可以大胆舍去这个数,让left++,去比较下一组数据;                                                                                                             那对于nums[right]而言,由于此时两数之和是小于目标值的,nums[right]还可以选择比nums[left]大的值继续努力达到目标,因此right指针我们按兵不动。
  3. 当num[left] + nums[right] > target时,同理我们可以舍去nums[right]。让right--,继续比较下一组数据,而left指针不变(因为它还可以去匹配比nums[right]更小的数)
class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {vector<int> v;int left = 0,right = price.size() - 1;while(left<right){int sum = price[left] + price[right];if(sum == target){v.push_back(price[left]);v.push_back(price[right]);break;}else if(sum > target){right--;}else{left++;}}return v;}
};

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

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

相关文章

KMP-子串匹配算法-关键点理解

1.理解next[]数组的使用与来历 2.求解next[]数组 一、kmp算法的原理 首先观察暴力解法&#xff1a;假设主串为&#xff1a;abdxxabc&#xff0c;模式串为abxxabd。 暴力解法&#xff0c;就是对主串每个字符作为第一个字符&#xff0c;开始和模式串比较。 比如&#xff1a;从…

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装

Flutter 学习之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装 目录 Flutter 学习之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 实现简单的数据本地化 保存/获取/移除/判断是否存在…

群体智能优化算法-粒子群优化算法(Particle Swarm Optimization, PSO,含Matlab源代码)

摘要&#xff08;Abstract&#xff09; 粒子群优化&#xff08;PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;受鸟群觅食行为的启发。PSO 通过模拟粒子&#xff08;个体&#xff09;在搜索空间中的运动来寻找最优解。每个粒子根据自身的历史最优位置&#xff08;p…

Redis 在windows下的下载安装与配置

参考链接:https://developer.aliyun.com/article/1395346 下载 Redis 访问 Redis 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 下载 Redis 时&#xff0c;你可以选择 ZIP 包或 MSI 安装&#xff1a; ZIP包&#xff1a;需要手动解压、初始化、配置和…

UE5材质法线强度控制节点FlattenNormal

连法 FlattenNormal内部是这样的 FlattenNormal的作用是用来调整法线强度 连上FlattenNormal后 拉高数值

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内&#xff0c;我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…

Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南

一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…

ArcGIS10.X影像智能下载!迁移ArcGIS Pro批量智能高清影像下载工具至ArcGIS!

上周我们分享了 我写的一个ArcGIS Pro版批量下载高清影像&#xff08;谷歌、天地图、ESRI等&#xff09;工具给大家&#xff0c;Deepseek我&#xff01;写一个ArcGIS Pro批量下载高清影像&#xff08;谷歌、天地图、ESRI等&#xff09;工具给大家-CSDN博客文章浏览阅读130次。深…

前端面经分享(25/03/19)

北京一家做协同办公软件出海的公司&#xff0c;技术一面&#xff0c;20k-40k&#xff0c;要求3-5年 详细聊了一下上家公司的项目上家公司的项目是不做了吗&#xff0c;离职原因是什么&#xff0c;你觉得公司的这个产品怎么样在做AI类的业务时&#xff0c;作为前端感觉跟常规业务…

7 款可视化爬虫工具全解析:案例示范与操作指南

目录 1. ParseHub 2.WebHarvy 3.DataMiner 4.Dexi.io 5.ContentGrabber 6.Portia 7.UiPath 文档聚焦 7 款热门可视化爬虫工具&#xff0c;突出简便的可视化操作&#xff0c;简单拖拽、设置&#xff0c;无需编程知识&#xff0c;人人皆可上手。 1. ParseHub ParseHub 是一…

使用 `pytest` 框架时,可以通过极限封装将 YAML 文件的读取、解析

在使用 pytest 框架时,可以通过极限封装将 YAML 文件的读取、解析和测试用例的通用逻辑封装成共享的方法或 fixture,从而减少重复代码。以下是详细的实现步骤和示例。 1. 封装 YAML 文件读取和解析 将 YAML 文件的读取和解析逻辑封装到一个工具函数中,供所有测试用例调用。…

HarmonyOS next性能优化:多维度策略与实战案例

HarmonyOS next性能优化&#xff1a;多维度策略与实战案例 在HarmonyOS next开发中&#xff0c;性能优化是提升用户体验、确保应用流畅运行的关键。本文将从多个角度探讨HarmonyOS next的性能优化策略&#xff0c;并通过示例代码展示优化前后的效果对比&#xff0c;帮助开发者…

springboot项目,mapper.xml里面,jdbcType报错 已解决

找了很多资料&#xff0c;最后发现原来是依赖版本不兼容的问题。改了版本号即可 报错原因&#xff1a; springboot版本为2.16.3 但是我导入的依赖版本是3.0.1&#xff0c;不兼容&#xff0c;报错 解决&#xff1a;修改版本号&#xff0c;2.3.1兼容springboot2.6.x。依赖下载完…

rust学习笔记16-206.反转链表(递归)

rust函数递归在14中已经提到&#xff0c;接下来我们把206.反转链表&#xff0c;用递归法实现 递归函数通常包含两个主要部分&#xff1a; 基准条件&#xff08;Base Case&#xff09;&#xff1a;递归终止的条件&#xff0c;避免无限递归。 递归步骤&#xff08;Recursive Ste…

QT-LINUX-Bluetooth蓝牙开发

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…

鸿蒙Next开发与未来发展的变革:全场景操作系统的全新纪元

文章目录 引言&#xff1a;从兼容到自主的跨越式进化一、鸿蒙Next技术架构解析1.1 系统架构全景图1.1.1 微内核架构优势 1.2 与OpenHarmony的关系 二、开发范式革命2.1 应用开发模式对比2.1.1 元服务&#xff08;Meta Service&#xff09;定义 2.2 开发工具链升级&#xff08;D…

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…

利用Python爬虫获取Shopee(虾皮)商品详情:实战指南

在跨境电商领域&#xff0c;Shopee&#xff08;虾皮&#xff09;作为东南亚及台湾地区领先的电商平台&#xff0c;拥有海量的商品信息。无论是进行市场调研、数据分析&#xff0c;还是寻找热门商品&#xff0c;获取Shopee商品详情都是一项极具价值的任务。然而&#xff0c;手动…

【OCR】总结github上开源 OCR 工具:让文字识别更简单

前言 在数字化的时代&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术成为了我们处理文档、图像文字信息的得力助手。它能够将图像中的文字信息转换为可编辑和可处理的文本数据&#xff0c;极大地提高了信息处理的效率。今天&#xff0c;我要给大家介绍一些优秀的开源…

GenICam标准

GenICam的目标是为所有类型的相机提供一个统一的编程接口。无论相机使用的是哪种传输协议或实现了哪些功能&#xff0c;编程接口&#xff08;API&#xff09;都是一样的。 GenICam&#xff08;Generic Interface for Cameras&#xff09;是一个为工业相机和图像采集设备设计的…