算法修炼之路之双指针含多道leetcode 经典题目

news2024/12/29 8:32:14

目录

前言 

一:普通双指针

1.经典题目一  283移动0问题

分析

代码实现

2.经典题目二 1089复写0 

分析

代码实现

二:解决成环类问题-快慢指针 

经典例题一 202快乐数

分析 

代码实现 

 三:左右相遇指针

经典例题一 11 盛最多水的容器

分析 

代码实现 

 


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

前言 

在解决关于数组的问题时,常常用到双指针的解决方法来优化算法,帮助解决问题,常见的双指针分为普通双指针,快慢指针,左右相遇指针等

一:普通双指针

普通双指针就是解决普通问题,一般是在原数组上改动数据时,有从前向后,从后向前,都从前向后,都从后向前,对数组分块来解决问题等

1.经典题目一  283移动0问题

分析

 

代码实现
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        //双指针方法
        int cur=0,dest=-1;
        int n=nums.size();
        while(cur<n)
        {
            if(nums[cur]==0)
            {
                ++cur;
            }
            else
            {
                swap(nums[++dest],nums[cur++]);
            }
        }
    }
};

2.经典题目二 1089复写0 

分析

 

代码实现

 

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur=0,dest=-1;
        int n=arr.size();
        //求最后一个要复写的数据
        while(cur<n)
        {
            if(arr[cur])//不为0走一步
            {
                ++dest;
            }
            else//为0走两步
            {
                dest+=2;
            }
            if(dest>=n-1) break;//边界问题防止越界访问
            ++cur;
        }

        //处理边界问题
        if(dest==n)
        {
            arr[n-1]=0;
            dest-=2;
            cur-=1;
        }

        //再从后往前复写数据
        while(cur>=0)
        {
            if(arr[cur])
            {
                arr[dest--]=arr[cur--];
            }
            else
            {
                arr[dest--]=0;
                arr[dest--]=0;
                --cur;
            }
        }
    }
};

二:解决成环类问题-快慢指针 

在解决一些关于数组或者链表成环类问题时常常用到的是快慢指针,就是slow指针走一步,fast指针一次走两步,常常用相遇来解决问题

经典例题一 202快乐数

分析 

代码实现 
class Solution {
public:
    int bitSum(int n)//计算n的平方和
    {
        int sum=0;
        while(n)
        {
            int tmp=n%10;
            sum+=tmp*tmp;
            n/=10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow=n,fast=bitSum(n);//slow为第一个位置,fast为第二个位置
        while(slow!=fast)//走到直至相遇
        {
            slow=bitSum(slow);
            fast=bitSum(bitSum(fast));
        }
        if(slow==1)//是1的话则是快乐数
        {
            return true;
        }
        return false;
    }
};

 三:左右相遇指针

说明一下,左右相遇指针是自己理解取的名字,意思就是这类题定义的双指针得从两端向中间走,直至相遇

经典例题一 11 盛最多水的容器

分析 

对于这道题大多人首先想到的是暴力求解,求出每两个数据之间的容量,在求出最大的一个

但这样的话对于这道题,这样做的话会超出时间限制的,因此得采取其他方法

代码实现 
class Solution {
public:
    int maxArea(vector<int>& height) {
        int left=0,right=height.size()-1;//左右双指针
        int ret=0;
        while(left<right)
        {
            int v=min(height[left],height[right])*(right-left);//算出数据
            ret=max(ret,v);//求出最大的一个数据,存放在ret中

            //移动指针
            if(height[left]<height[right])
            {
                ++left;
            }
            else
            {
                --right;
            }
        }
        return ret;
    }
};
 

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

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

相关文章

杂货铺 | Linux虚拟机Ubuntu操作系统下设置共享文件夹(以及找不到hgfs文件夹怎么办)

文章目录 &#x1f4da;步骤一&#xff1a;配置共享文件夹&#x1f4da;步骤二&#xff1a;配置挂载环境&#x1f4da;步骤三&#xff1a;解决权限问题&#x1f4da;步骤四&#xff1a;解决重启失效问题 &#x1f4da;步骤一&#xff1a;配置共享文件夹 建立本地共享文件夹&…

TripoSR: Fast 3D Object Reconstruction from a Single Image 论文阅读

1 Abstract TripoSR的核心是一个基于变换器的架构&#xff0c;专为单图像3D重建设计。它接受单张RGB图像作为输入&#xff0c;并输出图像中物体的3D表示。TripoSR的核心包括&#xff1a;图像编码器、图像到三平面解码器和基于三平面的神经辐射场&#xff08;NeRF&#xff09;。…

程序员做副业,AI+公众号爆文,开启赚钱新模式!

给大家介绍一个程序员可做的副业&#xff0c;AI公众号爆文项目。 公众号已经成为了一个巨大的流量池&#xff0c;许多优秀的公众号作者通过发布爆款文章&#xff0c;获得了丰厚的收益。 而作为程序员的你&#xff0c;是否也想过要利用自己的技术优势&#xff0c;在这个领域分…

React Router 5 vs 6:使用上的主要差异与升级指南

React Router 5 的一些API 在 React Router 6 上有时可能找不到&#xff0c;可能会看到如下画面&#xff1a;export ‘useHistory’ was not found in ‘react-router-dom’ … React Router目前有两个大的版本&#xff0c;即React Router 5、6。React Router 6 在设计上更加简…

自然语言处理NLP:文本预处理Text Pre-Processing

大家好&#xff0c;自然语言处理(NLP)是计算机科学领域与人工智能领域中的一个重要方向&#xff0c;其研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文将介绍文本预处理的本质、原理、应用等内容&#xff0c;助力自然语言处理和模型的生成使用。 1.文本…

CSS实现弹性盒子保持水平和垂直居中

弹性盒子 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

HarmonyOS实战开发-录音机、如何实现音频录制和播放的功能

介绍 本示例使用audio相关接口实现音频录制和播放的功能&#xff0c;使用mediaLibrary实现音频文件的管理。 相关概念&#xff1a; AudioRecorder&#xff1a;音频录制的主要工作是捕获音频信号&#xff0c;完成音频编码并保存到文件中&#xff0c;帮助开发者轻松实现音频录…

Python人工智能教学之掌握机器学习深度学习并提升实战能力(共72个视频教学+课程资料)云盘下载

人工智能是未来的发展方向&#xff0c;掌握了人工智能&#xff0c;就掌握了钱图。。。 Python人工智能教学之掌握机器学习深度学习并提升实战能力&#xff08;共72个视频教学课程资料&#xff09; 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ryJd5PNx1tLD…

javaEE初阶——多线程(四)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题的第四篇(关于多线程代码案例中的单例模式) 如果有不足的或者错误的请您指出! 目录 九、多线程代码案例(单例模式)1.单例模式1.1饿汉模式1.2懒汉模式1.3使用场景1.4上…

Elasticsearch安装、启动异常问题总结

安装es、kibana、ik分词器可参考&#xff1a;http://t.csdnimg.cn/59mEG 1. 内核过低 我们使⽤的是 centos6 &#xff0c;其 linux 内核版本为 2.6 。⽽ Elasticsearch 的插件要求⾄少 3.5 以上版 本。不过没关系&#xff0c;我们禁 ⽤这个插件即可。 修改 elasticsearch.ym…

车内AR互动娱乐解决方案,打造沉浸式智能座舱体验

美摄科技凭借其卓越的创新能力&#xff0c;为企业带来了革命性的车内AR互动娱乐解决方案。该方案凭借自研的AI检测和渲染引擎&#xff0c;打造出逼真的数字形象&#xff0c;不仅丰富了车机娱乐内容&#xff0c;更提升了乘客与车辆的互动体验&#xff0c;让每一次出行都成为一场…

.NET JWT入坑

前言 JWT (JSON Web Token) 是一种安全传输信息的开放标准&#xff0c;由Header、Payload和Signature三部分组成。它主要用于身份验证、信息交换和授权。JWT可验证用户身份&#xff0c;确保访问权限&#xff0c;实现单点登录&#xff0c;并在客户端和服务器之间安全地交换信息…

HarmonyOS实战开发-音视频录制、如何实现音频录制和视频录制功能的应用

介绍 音视频录制应用是基于AVRecorder接口开发的实现音频录制和视频录制功能的应用&#xff0c;音视频录制的主要工作是捕获音频信号&#xff0c;接收视频信号&#xff0c;完成音视频编码并保存到文件中&#xff0c;帮助开发者轻松实现音视频录制功能&#xff0c;包括开始录制…

【JavaWeb】异步请求——AJAX

目录 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;优点传统Web与Ajax的差异Ajax工作流程Ajax 经典应用场景XMLHttpRequest常用方法事件常用属性 ajax: GET请求和POST请求的区别 传统Ajax实现传统方式实现Ajax的不足 $.ajax()语法常用属性参数常用函数参数 Aja…

Docker 镜像仓库常见命令

Docker Registry (镜像仓库) 常用命令 docker login 功能&#xff1a;登录到一个 Docker 镜像仓库&#xff0c;如果没有指定镜像仓库的地址&#xff0c;默认就是官方的 Docker Hub 仓库。 语法&#xff1a; docker login [options] [server]选项&#xff1a; -u&#xff1a;登…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

Failed to delete XXXX.jar

Failed to delete XXXX.jar 问题&#xff1a;idea控制台报Failed to clean project:Failed to delete idea中点击maven->对应pom->lifecycle->clean时&#xff0c;报错 原因&#xff1a;target文件可能时编译的文件被其他程序占用&#xff0c;导致资源无法回收 解…

u盘为什么一插上电脑就蓝屏,u盘一插电脑就蓝屏

u盘之前还好好的&#xff0c;可以传输文件&#xff0c;使用正常&#xff0c;但是最近使用时却出现问题了。只要将u盘一插入电脑&#xff0c;电脑就显示蓝屏。u盘为什么一插上电脑就蓝屏呢?一般&#xff0c;导致的原因有以下几种。一&#xff0c;主板的SATA或IDE控制器驱动损坏…

农业现代化:UWB模块为农业领域带来的效益和便利

随着科技的进步和农业现代化的推进&#xff0c;超宽带&#xff08;UWB&#xff09;技术正逐渐在农业领域发挥重要作用。UWB模块作为UWB技术的核心组成部分&#xff0c;具有高精度、实时性强的特点&#xff0c;为农业生产提供了新的技术手段和解决方案。本文将探讨UWB模块在农业…

WSL访问adb usb device

1.Windows上用PowerShell运行&#xff1a; winget install --interactive --exact dorssel.usbipd-win 2.在WSLUbuntu上终端运行&#xff1a; sudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-too…