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

算法讲解--查找总价值为目标值的两个商品

一,题目描述

题目中的意思也就是说给你一个值和一个数组。这一个值能不能拆分为一个数组中已有的两个数。注意:题目中给的数组为升序数组。

二,算法讲解

1,暴力求解:

通过两层次循环将数组中每一种情况都和target比较。是否等于target。若等于则返回对应的值。不等于返回空数组。时间复杂度为O(N^2)。若题目中对于时间复杂度要求很高,则会因为超时导致该题目无法通过。

vector<int> twoSum(vector<int>& price, int target) {vector<int> s(0,2);for(int i = 0 ; i < price.size();i++){for(int j = i+1; j < price.size();j++){if(price[i] + price[j] == target){s.push_back(price[i]);s.push_back(price[j]);return s;}}}return s;}

 会出现超时错误。 

2,双指针法:

在题目的介绍中明显提到给出的数组并不普通数组,而是升序数组。由此定义两个指针。left指向最左边,也就是最小数据;right指向最右边,也就是最大数据。如题目中第二组例子如图:

第一步:

目标值为61 。left + right   =  74  >   61 。 此时left向右所有的值都大于74也就是说都大于61 。因此right减减。如图:

第二步:

left + right = 60 <  61  。此时right向左的所有值都小于60也就是说都小于61 .。因此 left++。如图:

 第三步;

left +  right = 73 > 61。情况和第一步相同,执行第一步操作。如图:

第四步:
left + right = 55 < 61 。情况和第二步相同,执行第二步操作。如图:

第五步:

left + right =61 == target 。将这两值存入vector数组进行返回。得出结果。如left > right 则表明该数组中没有满足题目中的数值。返回空数组。

该方法仅仅对数据遍历了一边,因此时间复杂度为O(N).。

三,代码实现

 vector<int> twoSum(vector<int>& price, int target) {vector<int> s(0,2);int left = 0;int right = price.size()-1;while(left < right){if(price[left] + price[right] == target){s.push_back(price[left]);s.push_back(price[right]);return s;}if(price[left] + price[right] > target){right--;}if(price[left] + price[right] < target){left++;}}return s;} 

题目中的push_back对数据进行尾部插入。具体可以参考vector的讲解文章。C++--vector_c++ vector assign-CSDN博客

四,练习

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

http://www.dtcms.com/a/298667.html

相关文章:

  • MyBatisPlus简介与基本CRUD
  • 域名服务器的作用是什么
  • 【js(7)创建对象的三种写法】
  • Node.js(三)之Express
  • Three.js 动画系统入门:Tween.js 与 AnimationMixer 的使用
  • 习题5.6 “数学黑洞“
  • Java研学-RabbitMQ(二)
  • 亚德诺半导体AD8612ARUZ-REEL双通道精密运算放大器,0.5μV超低失调电压+0.02μV/°C温漂!
  • 老龄化浪潮下的破局者:智慧养老重塑银发经济格局
  • ptmalloc(glibc-2.12.1)源码解析2
  • 深入理解 UDP 协议:从原理到实战的技术解析
  • 开源语音TTS与ASR大模型选型指南(2025最新版)(疯聊AI提供)
  • Paimon主键表的合并机制
  • 模糊综合评估法简单示例
  • MySQL的认识与基本操作
  • NaVILA源码解析——从其VLA部分到其low-level部分:涵盖legged-loco、rsl_rl
  • AMD推出Radeon AI Pro R9700:32GB显存加持,发力AI推理与专业图形双场景
  • 13.使用C连接mysql
  • ro属性和persist属性的区别
  • 什么是游戏盾(高防版)?
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-24,(知识点:二极管基础知识,单向导电性)
  • Redux 入门超详细指南
  • vue3中pinia详解
  • 关于“前导零”的问题记录,也就是(0.1)和.1这种数据处理问题
  • streamyfin(世博会)android 编译
  • 0人工沟通,它如何用AI撬动海外B端9400亿采购市场?
  • Round-Robin仲裁器
  • <HMI><威纶通><触摸屏>基于威纶通MT8106iQ触摸屏,实现自定义登录窗口(优化)
  • 内核驱动相关知识点
  • 【Agent】Common Ground 团队协作模型:Partner、Principal 与 Associate