双指针思想

news2024/11/17 2:42:09

一.双指针思想

1.分类:同向双指针,反向双指针

2.优点:可以将两层循环嵌套的问题优化成一层循环

3.常见情况

<1>利用快慢双指针确定链表的中间节点,链表是否带环,带环链表的入环点在哪里

<2>一次循环解决需要两次循环遍历顺序表的问题

<3>剩余情况需要根据题目具体考量

4.例题

<1>题目:283.移动零(. - 力扣(LeetCode))

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

<2>算法思想:

1)定义两个指针cur,dest:让cur指向数组的nums[0],用来遍历数组;让dest指向nums[-1],用来确定非零元素和零元素的分界线

2)当cur指向的元素为0时,cur++;当cur指向的元素不为0时,让dest++,同时交换两个指针指向的元素,cur++

<3>代码实现:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int cur=0,dest=-1;cur<nums.size();++cur)
        {
            if(nums[cur]!=0)
            {
                swap(nums[++dest],nums[cur]);
            }
        }

    }
};

二.滑动窗口

1.本质:有具体大小的由同向双指针控制的区域

2.使用限制:数组数据只能是正数

注:该思想是根据单调性,当在某处可以完成要求后,若再进数据势必不会是所求的可能结果

3.使用模板:

<1>初始化两个指针:left,right

<2>数据进窗口

<3>判断是否满足条件,出数据

<4>根据实际情况,更新结果

4.正确性:利用单调性,规避了很多一定不成立的情况

5.例题

<1>题目:209.长度最小的子数组(. - 力扣(LeetCode))

给定一个含有 n 个正整数的数组和一个正整数 target找出该数组中满足其总和大于等于 target 的长度最小的。

<2>算法思想:

1)定义两个指针left,right,均指向数组中第一个元素

2)进窗口:让right指向的元素进入[left,right]的窗口内

3)判断:若是窗口内元素之和大于等于目标值,计算此时窗口的长度,更新最小长度,同时让left指向的元素出窗口;若不满足则right继续向后移动带着元素进入窗口

<3>代码实现:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int left=0,right=0;
        int sum=0,n=nums.size(),len=INT_MAX;
        for(;right<n;++right)
        {
            sum+=nums[right];//进窗口
            while(sum>=target)
            {
                len=min(len,right-left+1);//更新最小长度
                sum-=nums[left++];//出窗口
            }
        }
        return len==INT_MAX?0:len;
    }
};

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

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

相关文章

Android Fragment 学习备忘

1.fragment的动态添加与管理&#xff0c;fragment生命周期在后面小节&#xff1a;https://www.bilibili.com/video/BV1Ng411K7YP/?p37&share_sourcecopy_web&vd_source982a7a7c05972157e8972c41b546f9e4https://www.bilibili.com/video/BV1Ng411K7YP/?p37&share_…

安装Android Studio及第一个Android工程可能遇到的问题,gradle下载过慢、sync失败?

Android Studio版本众多&#xff0c;电脑操作系统、电脑型号、电脑硬件也是多种多样&#xff0c;幸运的半个小时内可以完成安装&#xff0c;碰到不兼容的电脑&#xff0c;一天甚至更长时间都无法安装成功。 Android安装及第一个Android工程分为4个步骤&#xff0c;为什么放到一…

9.8笔试记录

1.在c中哪些运算符不能重载? 在 C 中&#xff0c;有以下几个运算符不能被重载&#xff1a; . &#xff1a;成员访问运算符。例如obj.member中的.不能被重载。 :: &#xff1a;作用域解析运算符。用于指定命名空间、类等的作用域&#xff0c;不能被重载。 ?: &#xff1…

spring揭秘19-spring事务01-事务抽象

文章目录 【README】【1】事务基本元素【1.1】事务分类 【2】java事务管理【2.1】基于java的局部事务管理【2.2】基于java的分布式事务管理【2.2.1】基于JTA的分布式事务管理【2.2.2】基于JCA的分布式事务管理 【2.3】java事务管理的问题 【3】spring事务抽象概述【3.1】spring…

easyExcel-读取Excel

1、简单读取&#xff0c;没有合并单元格 2、复杂读取&#xff0c;合并单元格-方法一 1、简单读取&#xff0c;没有合并单元格 1.1、引入pom文件 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.…

【单片机】详细解析完全重映射和部分重映射

1、重映射的作用 单片机中的每个引脚通常都有多个功能&#xff0c;不仅仅是作为普通的输入或输出&#xff0c;还可以与某些外设&#xff08;如定时器、串口、SPI、I2C等&#xff09;关联。默认情况下&#xff0c;这些外设功能通常固定绑定到特定的GPIO引脚。但是&#xff0c;在…

Matplotlib颜色透明度设置

matplotlib中的透明度设置都是通过alpha设置的,一般在能设置颜色的包括背景色、图表色、文字颜色都可以设置透明度 float类型,取值范围为[0.0,1.0],alpha取值越小越透明 import numpy as np import matplotlib.pyplot as pltx np.linspace(0, 2*np.pi, 100) y np.sin(x) y1…

Arch - 架构安全性_授权(Authorization)

文章目录 OverView授权&#xff08;Authorization&#xff09;RBAC&#xff1a; 概述RBAC&#xff1a;基于角色的访问控制RBAC&#xff1a;主要元素 OAuth2&#xff1a;面向第三方应用的认证授权协议业务场景OAuth2的工作流程OAuth2 四种不同的授权方式授权码模式&#xff08;A…

Android Studio 2024最新版Hello World

Android Studio 2024最新版Hello World 1. Android Studio 2024安装视频2. 创建项目Read Timed out 问题Android Studio Build Output 控制台中文乱码问题 3. 驱动管理 本文章介绍如何通过Android Studio 2024最新版创建项目&#xff0c; 并成功输出Hello World。 本次教程版本…

关于QT中使用网络编程QtNetwork的问题

在此处添加network模块 在链接器中添加附加库目录(QT对应的lib)在链接器-输入中添加对应的lib库(Qt5Network.lib) 这样,就可以使用对应的下面的库文件了,比如: #include <qnetworkaccessmanager.h>

参数高效微调(PEFT)综述

人工智能咨询培训老师叶梓 转载标明出处 大模型如BERT和GPT-3的参数数量庞大&#xff0c;动辄数十亿甚至数千亿级别&#xff0c;给进一步的微调和应用带来了巨大的挑战。针对这一问题&#xff0c;Vladislav Lialin、Vijeta Deshpande、Anna Rumshisky等研究者中提出了一系列参…

Leetcode面试经典150题-69.X的平方根

相当简单的题目&#xff0c;但是出现的概率还挺高的 解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public int mySqrt(int x) {/**0的平方根是0 */if(x 0) {return 0;}/**1~3的平方根是1 */if(x < 3) {return 1;}/**其他情况我们采用二分查找&#xff…

Python 调用手机摄像头

Python 调用手机摄像头 在手机上安装软件 这里以安卓手机作为演示&#xff0c;ISO也是差不多的 软件下载地址 注意&#xff1a;要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 ) 安装完打开IP摄像头服务器 点击分享查看IP 查看局域网的I…

Android Studio下载Gradle失败问题解决

问题说明 使用 Android Studio 构建程序报错如下 Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-7.5.1-bin.zip. Reason: java.net.SocketTimeoutException: Connect timed out问题解决 下载对应版本的压缩包 gradle-7.5.1…

香橙派转换模型以及在开发板上部署

新手小白记录一下自己使用香橙派模型转换以及在开发板上运行的过程&#xff0c;防止后面忘记。 使用的开发板&#xff1a;Orange Pi 5 Plus&#xff08;rk3588&#xff09; 官方的一些资料在&#xff08;主要参考用户手册&#xff09;&#xff1a;Orange Pi - Orangepihttp:/…

价格适中超微小间距P1.8全彩LED显示屏广泛应用于COB会议一体机

随着科技的不断进步与市场需求的日益多样化&#xff0c;价格适中且具备超微小间距P1.8技术的全彩LED显示屏&#xff0c;在COB&#xff08;Chip On Board&#xff09;会议一体机领域的应用正逐步深化&#xff0c;引领着现代会议展示的新风尚。这种显示屏不仅以其细腻的画质和卓越…

单片机DMA原理及应用详解(下篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获&#xff01; 关于DMA的原理&#xff0c;可以看上一篇文章&#xff1a; 单片机DMA原理及应用详解&#xff08;上篇&#xff09;&#xff08;附工程源码&#xff09;-CSDN博客 目录 一、STM32单片…

黑龙江IBM Storwize v3700存储故障维修

中国黑龙江省佳木斯IBM Storwize v3700存储控制器故障维修案例&#xff1a; 报修单位&#xff1a;黑龙江佳木斯某某医院 存储型号&#xff1a;联想或IBM v3700 存储故障&#xff1a;无法正常访问存储磁盘&#xff0c;无法进存储web管理界面&#xff0c;可以进存储服务助手界…

《C++ 中的左值与右值》

在 C 的世界里&#xff0c;左值和右值是两个重要的概念&#xff0c;理解它们对于掌握 C 语言的精髓至关重要。 首先&#xff0c;我们来认识左值。左值&#xff0c;即 “locator value”&#xff0c;可以理解为有明确存储位置且可以被取地址的表达式。简单来说&#xff0c;一个可…

Linux之MySQL主从复制

概述 MySQL的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据复制解决方案&#xff0c;将主数据库的DDL&#xff08;数据定义语言&#xff09;和DML&#xff08;数据操纵语言&#xff09;操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这…