双指针问题解法集(一)

news2024/11/5 12:42:32

1.指针对撞问题(利用有序数组的单调性衍生)

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

1.1.1题目解析

有序数组,找到和为price的两个元素,只需要一个解即可。

1.1.2算法原理

a.解法一:两层for循环暴力枚举,时间复杂度O(N^{2});空间复杂度O(1);

b:解法二:利用双指针对撞,left指向最左边元素,right指向最右边元素,利用单调性原理,如果他们的和大于price,那么left++,如果和小于price,那么right--,等于price直接return。时间复杂度O(N),空间复杂度O(1)

1.1.3代码实现

class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target) {
        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 return{price[left],price[right]};
        }
        return{-1,-1};
    }
};

1.2611. 有效三角形的个数 - 力扣(LeetCode)

1.2.1题目解析:

给定一个数组nums,找出可以组成三角形三条边的三元组个数

1.2.2算法解析:

a.解法一:三层for循环,暴力枚举,时间复杂度O(N^3),空间复杂度O(1);

b.解法二:两小边之和大于第三边时就能确定三角形成立。因此我们可以先将数组排序,这样较大的数就在右边,较小的数就在左边。我们可以先固定一个三角形中最大边maxn,那么较小的两条边就在大边的左边寻找。定义left为最左边元素,right为最右边元素。  

如果left+right>maxn时,那么证明此时为三角形,同时因为left左边的数都比left大,那么left依次变为left左边时都可以成立,那么就可以计入right-left个三角形。之后right--,继续去寻找;

如果left+right<=maxn时。那么left就要++,去寻找更大的数。

当left==right时就停止,接下来就改变固定的大数,继续寻找。时间复杂度O(N*longN)+O(N^2),空间复杂度O(1);例[2,2,3,4]

1.2.3代码解析:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int maxn = nums.size()-1;
        int ret = 0;
        while(maxn >= 2)
        {
            int left = 0,right = maxn-1;
            while(right > left)
            {
                if(nums[left] + nums[right] > nums[maxn])
                {
                    ret+= right - left;
                    right--;
                }else
                {
                    left++;
                }
            }
            maxn--;
        }
        return ret;
    }
};

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

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

相关文章

深度学习(十):伦理与社会影响的深度剖析(10/10)

深度学习&#xff1a;伦理与社会影响的深度剖析 一、深度学习的伦理挑战 &#xff08;一&#xff09;数据隐私之忧 深度学习模型的训练往往需要大量数据&#xff0c;而数据的收集过程可能会侵犯个人隐私。例如&#xff0c;据统计&#xff0c;面部识别技术在全球范围内每天会收…

网络模型——二层转发原理

网课地址&#xff1a;网络模型_二层转发原理&#xff08;三&#xff09;_哔哩哔哩_bilibili 一、路由交换 网络&#xff1a;用来信息通信&#xff0c;信息共享的平台。 网络节点&#xff08;交换机&#xff0c;路由器&#xff0c;防火墙&#xff0c;AP&#xff09;介质&#…

探索NetCat:网络流量监测与数据传输的利器

从简单的数据传输到复杂的网络调试&#xff0c;NetCat的灵活性和多功能性让人赞叹不已&#xff0c;在这篇文章中我将深入探讨NetCat的魅力&#xff0c;揭示它的基本功能、实用技巧以及在日常工作中的应用场景&#xff0c;发现如何用这一小工具提升的网络技能与效率。 目录 Net…

提高交换网络可靠性之链路聚合

转载请注明出处 该实验为链路聚合的配置实验。 1.改名&#xff0c;分别将交换机1和交换机2改名为S1&#xff0c;S2&#xff0c;然后查看S1&#xff0c;S2的STP信息。以交换机1为例&#x1f447;。 2.交换机S1&#xff0c;S2上创建聚合端口&#xff0c;将端口加入聚合端口。以S…

Kubernetes:(三)Kubeadm搭建K8s 1.20集群

文章目录 一、Kubeadm安装流程二、实验1.环境准备2.所有节点安装kubeadm&#xff0c;kubelet和kubectl&#xff08;除了Harbor节点&#xff09;3.部署 Dashboard4.安装Harbor私有仓库 一、Kubeadm安装流程 集群名称IP地址安装软件master&#xff08;2C/4G&#xff0c;cpu核心数…

使用MongoDB Atlas构建无服务器数据库

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

Windows 10 安装使用Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成&#xff01; 磁盘分区 开始分区&#xff1a; mkpart data_mysql # 分区名&…

论 ONLYOFFICE:开源办公套件的深度探索

公主请阅 引言第一部分&#xff1a;ONLYOFFICE 的历史背景1.1 开源软件的崛起1.2 ONLYOFFICE 的发展历程 第二部分&#xff1a;ONLYOFFICE 的核心功能2.1 文档处理2.2 电子表格2.3 演示文稿 第三部分&#xff1a;技术架构与兼容性3.1 技术架构3.2 兼容性 第四部分&#xff1a;部…

NVIDIA GeForce RTX 4090 Mobile 16G 性能分析

最近在看台式电脑&#xff0c;看到1W内居然能买到 i9-14900HX、RTX4090 16G&#xff0c;感觉不对劲&#xff0c;就离谱~ 4090的显卡什么时候出了16G的&#xff0c;而且还这这么便宜&#xff1f;&#xff1f;&#xff1f;&#xff1f; 目录 1、NVIDIA官网查查4090 2、对比RT…

【ARCGIS实验】地形特征线的提取

目录 一、提取不同位置的地形剖面线 二、将DEM转化为TIN 三、进行可视分析 四、进行山脊、山谷等特征线的提取 1、正负地形提取&#xff08;用于校正&#xff09; 2、山脊线提取 3、山谷线的提取 4、河网的提取 5、流域的分割 五、鞍部点的提取 1、背景 2、目的 3…

STM32使用串口下载程序

STM32使用串口下载程序 FluMcu软件下载地址 单片机在线编程网 STM32 MCU启动模式配置(Boot Configuration) 单片机复位后&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚上的值将锁存&#xff0c;用户可以通过设置BOOT0和BOOT1引脚的值&#xff0c;来选择复位后的启动…

MATLAB口罩检测

在当今疫情严峻的背景下&#xff0c;口罩成为了人们必备的防护用品。然而&#xff0c;市面上却出现了大量假冒伪劣口罩。为了帮助大家准确辨别真假口罩&#xff0c;小编将为大家介绍一种基于MATLAB的口罩检测方法。 1.口罩检测原理 通过图像处理技术&#xff0c;借助MATLAB强大…

网络层4——网络控制协议ICMP

目录 一、格式 二、种类 1、差错报文 &#xff08;1&#xff09;终点不可达 &#xff08;2&#xff09;时间超过 &#xff08;3&#xff09;参数问题 &#xff08;4&#xff09;改变路由&#xff08;重定向&#xff09; &#xff08;5&#xff09;差错报文数据字段 ​编…

RHCE——web

一&#xff0c;什么是www www是world wide web的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用www来查询用户 所需要的信息。www可以结合文字、图形、影像以及声音等多媒体&#xff0c;并通过可以让鼠标单击超链接的方 式将信息以Internet传递到世界各处去…

GraphQL系列 - 第2讲 Spring集成GraphQL

目录 一、maven依赖二、Schema 定义三、代码集成3.1 创建模型类3.2 创建服务类3.3 创建控制器类 四、单元测试五、实际 HTTP 请求测试5.1 查询单个 Person5.2 查询所有 People5.3 添加 Person 六、其他6.1 开启graphiql6.2 开启schema查看端点 一、maven依赖 首先&#xff0c;…

如何将字母l劈开

如何将字母l从顶到底劈开&#xff1f; 一、分两步&#xff0c;将字母 l 劈开 个人认为&#xff0c;将字母l劈开&#xff0c;需要做两件事情&#xff0c;或者说可以通过如下两个步骤来实现&#xff1a; 【1】证明字母 l 是一个象形字母&#xff1a;即字母l它的本质&#xff0…

linux驱动-输入子系统框架讲解

Input 子系统包括三个层次&#xff0c;分别是设备驱动层&#xff0c;核心层&#xff0c;事件处理层。 为什么要分层呢? 比如我们开发了一个驱动程序 a.c&#xff0c;其中里面有 100 行代码是通用的&#xff0c;然后我又开发了一个 驱动程序 b.c&#xff0c;那这 100 行…

【C/C++】字符/字符串函数(0)(补充)——由ctype.h提供

零.导言 除了字符分类函数&#xff0c;字符转换函数也是一类字符/字符串函数。 C语言提供了两种字符转换函数&#xff0c;分别是 toupper &#xff0c; tolower。 一.什么是字符转换函数&#xff1f; 顾名思义&#xff0c;即转换字符的函数&#xff0c;如大写字母转小写字母&am…

ssh和ssl的区别在哪些方面?

在网络安全和数据保护领域&#xff0c;谈话中经常提到的两个词是SSH(安全外壳)和SSL(安全套接字层)。尽管这两者在在线通信安全中都具有重要意义&#xff0c;但它们的使用目的不同&#xff0c;并且处于网络堆栈的不同级别。本文将深入分析 SSH 和 SSL 主要区别在哪些方面。 概念…