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

临沂天元建设集团网站郑州发布会最新消息

临沂天元建设集团网站,郑州发布会最新消息,秦皇岛seo优化,沈阳市建设工程信息网招标公告[双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和 文章目录 [双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和查找总价格为目标值的两个商品题目分析解题思路代码实现总结 三数之和题目分析解题思路代码实现总结 …

[双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和

文章目录

      • [双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和
        • 查找总价格为目标值的两个商品
          • 题目分析
          • 解题思路
          • 代码实现
          • 总结
        • 三数之和
          • 题目分析
          • 解题思路
          • 代码实现
          • 总结

查找总价格为目标值的两个商品

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

image-20231031155107033

题目分析

(1) 数组内数字是升序

(2) 目标值为target

(3) 找两数之和为target

解题思路

找两个数字的和与目标值相等,我们可以想到使用双指针解法。

解法:双指针

数组是升序

如果两个指针都在前,当和小于目标值时候,就无法判断移动哪个指针了。所以我们的指针是一前一后:左指针从0开始,右指针从size-1开始。

如果和小于目标值,就让小的数字向右移动。

如果大于目标值,就让大的数字向左移动。

示例:

image-20231031160735676

看到这里,大家先去实现代码,再来看后面的内容。


代码实现
class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {vector<int> ret;int left = 0, right = price.size()-1;while(left != right){if(price[left] + price[right] > target) right--;else if(price[left] + price[right] < target) left++;else{ret.push_back(price[left]);ret.push_back(price[right]);break;}}return ret;}
};

image-20231031160917302

总结

这道题比较简单。

三数之和

15. 三数之和

image-20231031161109446

题目分析

(1) 找三数之和为0

(2) 三数不可以重复

解题思路

这和之前的两数之和十分相似,我们可以把它转变成两数之和来做。(首先理解上一道题)

解法:双指针

我们可以先排序,再让target = 0 - k(k为三数中的任意一个),这样就变成了求两数之和了(left从k后面的位置,right为size-1)。

即为:排序后,我们固定一个数为k,从它后面的数中找出两个数和为0-k即可。

最后我们必须保证不能有重复的数返回:

排序后,相同的数都会相邻,在找出一组数后,我们将左右指针分别进行迭代,去重。

当然固定的k也需要去重,和上面的方法一样。

示例:nums[] = {-4, -4, -4, 0, 0, 0, 1, 3, 4, 4, 4}

image-20231031171811503

看到这里,先去尝试实现代码,再来看下面的内容吧。


代码实现
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> ret;sort(nums.begin(), nums.end());for(int i = 0; i < nums.size(); ){if(nums[i] > 0) break;int left = i+1, right = nums.size()-1;int target = 0 - nums[i];while(left < right){int sum = nums[left] + nums[right];if(sum > target) right--;else if(sum < target) left++;else{ret.push_back({nums[i], nums[left], nums[right]});//C++11left++, right--;while(left < right && nums[left-1] == nums[left]) left++;while(left < right && nums[right+1] == nums[right]) right--;}}i++;while(i < nums.size() && nums[i] == nums[i-1]) i++;}return ret;}
};

image-20231031171931466

总结

细节1:题目让我们去三数和为0,我们把0-k当作目标值,转换为两数之和。

细节2:去重,先对指针进行移动,再进行判断;“三个指针”都需要进行去重;前提是保证指针不越界。

细节3:left指针从k之后开始

细节4:如果nums[k]到了大于0的位置,我们可以提前结束循环,因为没有两个正数和是负数。(例如nums[k] = 1, target = 0 -1 = -1;由于我们先进行过排序,后面的都是正数。)

http://www.yayakq.cn/news/597888/

相关文章:

  • 手机网站排名优化软件广东做网站公司
  • 杭州滨江建行网站如何给喜欢的明星做网站
  • 网站详情页用哪个软件做济南网站网站建设
  • 什么不属于网站推广软件杭州网站优化培训
  • wordpress站点标题添加电子商务网站建设与维护 论文
  • 网站开发实验报告模版网站做百度竞价引流费用多少钱
  • 国外做测评的网站seo技术什么意思
  • 网站策划书 范文企业宣传册模板文案
  • 丘受网站谁做的网球吧赣州章贡区人口
  • 网站建设中图片是什么意思网页界面设计的要求
  • 服装网站建设环境分析爱漫画-只做精品的韩漫网站
  • 自适应网站做多大尺寸的安卓市场wordpress主题
  • 南通网站建设方法南宁网站建设建站系统
  • 你注册过哪些网站网页设计网站
  • 怎样提交网站百度收录适合个人做的网站
  • 企业网站建设渠道网站开发人员招聘it管理
  • 创新的成都 网站建设wordpress 名片主题
  • 自贡住房和城乡建设厅网站晋江市住房建设局网站
  • 网站区域名怎么注册吗西宁做网站ci君博却上
  • 设计手机网站建设网络公司网站建
  • 做poster的网站集团网站推广
  • 美妆销售网站开发的目的企业网站管理是什么
  • 推荐聊城网站建设做机械设备哪个网站好
  • 机关 网站 建设方案浏览器推广怎么做
  • 网站使用手册机械网站建设
  • 郑州网站建设招标网站制作怎么赚钱
  • 网站开发公司组织架构南充阆中网站建设
  • 工业设计参考网站网站版面如何设计
  • 直播网站建设费用建设网站的服务费是指什么
  • 企业网企业网站制作怎么制作一个软件app