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

news2024/11/20 10:43:33

[双指针] (三) 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++11
                    left++, 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.coloradmin.cn/o/1154853.html

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

相关文章

Web APIs——其他事件

1、页面加载事件 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件 为什么要学&#xff1f; 有些时候需要等页面资源全部处理完了做一些事情老代码喜欢把script写head中&#xff0c;这时候直接找dom元素找不到 事件名&#xff1a;load …

内存DMA及设备内存控制详解

序言 对于PCIe 设备&#xff08;PCIe Endpoint&#xff09;来说&#xff0c;其和CPU CORE、DRAM 的交互&#xff0c;主要涉及两种类型的内存访问&#xff1a; 设备内存访问&#xff1a;PCIe 设备的 Device Memory&#xff08;设备内存&#xff09;的访问&#xff0c;例如CPU …

java.net.URISyntaxException: Illegal character in query at index

现象 现象调用httpGet请求时&#xff0c;报错&#xff0c;如下&#xff1a; 原因 因为调用的url里有特殊字符 如单引号&#xff0c;双引号&#xff0c;等号&#xff0c;& | 等 解决方案 使用url带参构造方法&#xff0c;会对url里面的特殊字符进行转义处理 URL url n…

Python-常用的量化交易代码片段

算法交易正在彻底改变金融世界。通过基于预定义标准的自动化交易,交易者可以以闪电般的速度和比以往更精确的方式执行订单。如果您热衷于深入了解算法交易的世界,本指南提供了帮助您入门的基本代码片段。从获取股票数据到回溯测试策略,我们都能满足您的需求! 1. 使用 YFina…

k8s从私有仓库拉取镜像

从私有仓库拉取镜像 | Kubernetes 准备开始 你必须拥有一个 Kubernetes 的集群&#xff0c;同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。可以通过 Minikube 构建一个你自己的集群&#xff0c;或者你可以…

网管的利器之NMap

在进行网络管理过程中&#xff0c;网管会借助很多的工具比如付费的一些产品&#xff0c;比如漏洞扫描、安全隐患发现、网络设备管理、上网行为管理等。 更多的情况下&#xff0c;网管员使用一些DOS命令或者免费的工具进行&#xff0c;比如前面介绍过的PingInfoView.exe、WinMTR…

机器学习(六)构建机器学习模型

1.9构建机器学习模型 我们使用机器学习预测模型的工作流程讲解机器学习系统整套处理过程。 整个过程包括了数据预处理、模型学习、模型验证及模型预测。其中数据预处理包含了对数据的基本处理&#xff0c;包括特征抽取及缩放、特征选择、特征降维和特征抽样&#xff1b;我们将…

lambda表达式 - c++11

文章目录&#xff1a; lambda表达式概念lambda表达式语法函数对象与lambda表达式 lambda表达式概念 lambda 表达式是 c11 中引入的一种匿名函数&#xff0c;它可以在需要函数对象的地方使用&#xff0c;可以用作函数参数或返回值。lambda 表达式可以看作是一种局部定义的函数对…

mysql之用户管理、权限管理、密码管理

用户管理 创建用户create user 杨20.0.0.13 identified by 123; 用户重命名rename user 杨20.0.0.13 to yang20.0.0.13; 删除用户drop user 杨20.0.0.13; 权限管理 查看用户权限show grants for 杨20.0.0.13; 赋予用户权限grant all privileges on *.* to 杨localhost id…

文章导读助你高效成长

文章目录 Java基础篇MySQL数据库篇Redis缓存篇 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开…

超低直流电阻测试仪

KDZD5510半导体体积电阻率测试仪是一款针对超低直流电阻测试专门设计开发的一款高精度测试仪&#xff0c;界面清爽、操作便捷&#xff1b;量程范围为&#xff1a;0.01uΩ~10MΩ&#xff1b;显示位数为五位半&#xff1b;自动双向电流测试&#xff0c; 同时脉冲式的测试方式避免…

医院室内地图导航技术分析与作用

随着科技的不断发展&#xff0c;医疗行业的服务水平也在逐步提高。为了方便患者和医务人员&#xff0c;医院室内地图导航技术应运而生。这种技术运用了多种元素&#xff0c;包括模型地图、室内3D电子地图、路线指引、对接医院系统、位置分享和寻车导航等&#xff0c;为医院提供…

Three.js 开发引擎的特点

Three.js 是一个流行的开源 3D 游戏和图形引擎&#xff0c;用于在 Web 浏览器中创建高质量的三维图形和互动内容。以下是 Three.js 的主要特点和适用场合&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

Python3,区区5行代码,制作期待的图表,这技能值得拥有(二)。

1、引言 小屌丝&#xff1a;鱼哥&#xff0c;这次按脚还不错&#xff1f; 小鱼&#xff1a;你说呢~ 小屌丝&#xff1a;那seabornde还记得&#xff1f; 小鱼&#xff1a;昂&#xff0c; 有印象 小屌丝&#xff1a;那咱开始整&#xff1f; 小鱼&#xff1a;这个… 行吧 小屌丝&…

ctfshow-web入门37-52

include($c);表达式包含并运行指定文件。 使用data伪协议 ?cdata://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg 是<?php system(cat flag.php);?> base64加密 源代码查看得到flag 38 多禁用了ph…

订水商城实战教程-06店铺信息

目录 1 创建数据源2 生成管理后台3 创建腾讯地图API4 配置小程序5 地址组件配置地图API6 显示店铺名称总结 上一篇我们介绍了权限控制&#xff0c;本篇我们就开始首页开发了。首页先需要显示店铺的名称&#xff0c;我们需要将店铺的信息存入数据源中。 1 创建数据源 打开控制台…

计组之存储系统

存储器概述 分类 1.按在计算机中的作用&#xff08;层次&#xff09;分类 主存储器。CPU可以直接随机地对其进行访问&#xff0c;也可以和高速缓冲存储器&#xff08;Cache)及辅助存储器交换数据。辅助存储器。辅存的内容需要调入主存后才能被CPU访问。高速缓冲存储器。位于…

电脑办公最佳拍档 夸克网盘升级低耗能备份、PDF阅读器等功能

临近年终&#xff0c;上班族不仅要总结过去一年的成绩还要开始制定新规划&#xff0c;在这个过程中整理资料是必不可少的环节。对于经常需要使用文件备份和PDF的用户&#xff0c;推荐大家试一下夸克网盘电脑端&#xff0c;升级后的“低耗能备份”和“PDF阅读器”让备份体验更丝…

Python 算法高级篇:最短路径算法的优化

Python 算法高级篇&#xff1a;最短路径算法的优化 引言 1. Dijkstra 算法2. Bellman-Ford 算法3. SPFA 算法4. 优化与比较5. 案例分析&#xff1a;地理导航6. 总结 引言 最短路径算法是图算法中的一个重要领域&#xff0c;它用于查找从一个起始节点到目标节点的最短路径。在这…