随想录二刷 (双指针法) leetcode 27 26 283 844

news2024/10/7 18:20:05

双指针法的原理

双指针法相对于暴力解法的优点有以下几点

  • 暴力遍历的时间复杂度会比较高
  • 双指针法利用两个指针进行遍历完成双层循环所做的事情

双指针一般有两种方法 同向指针,双向指针

第一题 leetcode 27 移除元素

题目描述

在这里插入图片描述

题目分析

采用暴力遍历可以得出结果,但是时间复杂度会比较高
本题中采用左右指针的做法 左指针实际是记录真实数组的下标,右指针进行遍历查找非目标指

代码如下所示

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        if(nums.size()==0)
        {
            return 0;
        }
        int left = 0;
        int right = nums.size() - 1;
        while(left<=right)
        {
            if(nums[left]!=val)
            {
                left++;
                continue;
            }
            if(nums[right]==val)
            {
                right--;
                continue;
            }
            // 排除以上的情况进行交换
            nums[left] = nums[right];
            left++;
            right--;
        }
        return left;
    }
};

第二题 leetcode 26 删除重复元素

题目描述

在这里插入图片描述

分析

此题需要删除元素
那么用快指针进行遍历查找非重复元素
慢指针在上一个非重复元素处

代码实现

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int slow = 0;
        if(nums.size()==1)
        {
            return 1;
        }
        for(int fast=1; fast<nums.size(); fast++)
        {
            if(nums[slow]!=nums[fast])
            {
                nums[++slow] = nums[fast];
            }
        }
        return ++slow;
    }
};

第三题 leetcode 283移动0

题目描述

在这里插入图片描述

代码注释看

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow = 0;
        // 慢指针记录非0数
        // 快指针进行遍历查找0 遇到0跳过 非0进行移动
        for(int fast=0; fast<nums.size(); fast++)
        {
            if(nums[fast]!=0)
            {	// slow++是为了保持记录
                nums[slow++] = nums[fast];
            }
        }
        for(int i=slow; i<nums.size(); i++)
        {
            nums[i] = 0;
        }
    }
};

第四题 leetcode 844 比较含退格的字符串

题目描述

在这里插入图片描述

题目分析

这个问题有多种思路
下面的方法是其中的一种思路

  1. 对每个字符串进行从后遍历计算#的个数 遇到非#就-1
  2. 遍历结束得到剩下的下标
  3. 再次进行遍历比对剩下的字符
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int t_remin = 0;
        int s_remin = 0;
        int i = s.size() - 1;
        int j = t.size() - 1;
        while(1)
        {
            while(i>=0)
            {
                if(s[i]=='#')
                {
                    s_remin++;
                }else
                {
                    if(s_remin>0)
                    {
                        s_remin--;
                    }else
                    {
                        break;
                    }
                }
                i--;
            }
            while(j>=0)
            {
                if(t[j]=='#')
                {
                    t_remin++;
                }else
                {
                    if(t_remin>0)
                    {
                        t_remin--;
                    }else
                    {
                        break;
                    }
                }
                j--;
            }
            if(i<0 || j<0)
            {
                break;
            }
            if(s[i]!=t[j])
            {
                return false;
            }
            i--;
            j--;
        }
        if(i<0 && j<0)
        {
            return true;
        }
        return false;
    }
};

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

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

相关文章

vector的基本使用

目录 介绍&#xff1a; vector iterator 的使用 增删查改 增&#xff08;push_back insert&#xff09;&#xff1a; 删(pop_back erase)&#xff1a; swap&#xff1a; vector的容量和扩容&#xff1a; 排序&#xff08;sort&#xff09;&#xff1a; 介绍&#xff…

SpringBoot入门(二)

这里写目录标题一、SpringBoot整合Junit1.1 搭建SpringBoot工程1.2 引入starter-test起步依赖1.3 编写类1.4 测试二、SpringBoot整合mybatis2.1 搭建SpringBoot工程2.2 引入mybatis起步依赖&#xff0c;添加驱动2.3 编写DataSource和MyBatis相关配置2.4 定义表和实体类2.5 编写…

100%BIM学员的疑惑:不会CAD可以学Revit吗?

在新一轮科技创新和产业变革中&#xff0c;信息化与建筑业的融合发展已成为建筑业发展的方向&#xff0c;将对建筑业发展带来战略性和全局性的影响。 建筑业是传统产业&#xff0c;推动建筑业科技创新&#xff0c;加快推进信息化发展&#xff0c;激发创新活力&#xff0c;培育…

apk中代码执行adb指令实现

背景&#xff1a;想要在android apk中直接使用adb指令&#xff0c;从而不需要把手机通过数据线方式连接到电脑&#xff0c;在电脑端执行adb指令。 一、权限相关 想要在apk代码中执行adb命令&#xff0c;涉及到执行权限。 首先手机需要有root权限。其次就算手机已经root了&…

yolov5/6/7系列模型训练日志结果数据对比分析可视化

早在之前使用yolov3和yolov4这类项目的时候可视化分析大都是自己去做的&#xff0c;到了yolov5的时候&#xff0c;变成了一个工具包了&#xff0c;作者全部集成进去了&#xff0c;这里我们以一个具体的结果为例&#xff0c;如下&#xff1a;整个训练过程产生的指标等数据都会自…

11.3 基于Django4的可重用、用户注册和登录系统搭建(优化)

文章目录邮件注册发送邮件功能测试基本的邮件注册功能实现完成注册表单完成注册的业务逻辑密码加密功能实现邮件注册确认创建模型修改视图测试处理邮件确认请求修改登录规则测试邮件注册 根据官方文档进行&#xff1a;https://docs.djangoproject.com/zh-hans/4.1/topics/emai…

什么是智慧实验室?

智慧实验室是利用现代信息技术和先进设备将实验室实现智能化和智慧化的概念。通过将各种数据、信息和资源整合在一起&#xff0c;实现实验室设备的互联互通&#xff0c;数据的实时采集、传输、处理和分析&#xff0c;从而提高实验室的效率、精度和可靠性。一、智慧实验室包含多…

Java~对于代码块与内部类的理解

目录 代码块 普通代码块 构造代码块 静态代码块 内部类 成员内部类 普通内部类 静态内部类 局部内部类 代码块 使用“{}”定义的一段代码成为代码块&#xff0c;代码块分为普通代码块、构造代码块、匿名代码块、同步代码块。 普通代码块 定义在方法中的代码&#x…

【go语言之thrift协议一】

go语言之thrift协议thrift文件shared.thriftSharedStructSharedServiceSharedServiceProcessorSharedServiceGetStructArgsSharedServiceGetStructResulttutorial.thrift基本数据类型引入其他thrift文件自定义类型定义常量enum继承thrift 相对于grpc而言&#xff0c;可能用的不…

逆向-还原代码之max 再画堆栈图 (Interl 64)

// source code #include <stdio.h> void max(int * a, int * b) { if (*a < *b) *a *b; } int main() { int a 5, b 6; max(&a, &b); printf("a, b max %d\n", a); return 0; } // 再画堆栈图 下周一&#xff08;2.27…

JavaEE简单示例——MyBatis关联映射

简单介绍&#xff1a; 在我们之前的案例中&#xff0c;我们进行了简单查询&#xff0c;条件产村&#xff0c;动态SQL的条件查询&#xff0c;但是这些操作都是在一张表中进行的&#xff0c;而在我们之前学习MySQL中还有一个很重要的操作就是多表查询操作&#xff0c;也就是说通…

图像亮度调整

非线性方式 调整图像的方法有很多&#xff0c;最常用的方法就是对图像像素点的R、G、B三个分量同时进行增加&#xff08;减少&#xff09;某个值&#xff0c;达到调整亮度的目的。即改变图像的亮度&#xff0c;实际就是对像素点的各颜色分量值做一个平移。这种方法属于非线性的…

适用于产研团队协作工具有哪些?盘点6大类协同办公软件

团队协作工具在提高团队协作效率、质量和灵活性&#xff0c;降低成本等方面都有着不小的作用。而根据协作内容、团队等特点的不同&#xff0c;团队协作工具可以分为多种类型&#xff0c;常见的包括&#xff1a;即时通讯工具&#xff0c;用于实时交流和沟通&#xff0c;其中又可…

SpringBoot整合JPA+人大金仓(kingbase8)

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-人大金仓&#xff08;kingbase8&#xff09;&#xff08;主要讲一些人大金仓数据库相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下Jpa框架整合人大金…

Spring Cloud Nacos源码讲解(三)- Nacos客户端实例注册源码分析

Nacos客户端实例注册源码分析 实例客户端注册入口 流程图&#xff1a; 实际上我们在真实的生产环境中&#xff0c;我们要让某一个服务注册到Nacos中&#xff0c;我们首先要引入一个依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><…

Bootstrap入门到精通(最全最详细)

文章目录前言一、Bootstrap是什么&#xff1f;二、Bootstrap安装方式一&#xff1a;将压缩包下载到本地引入使用方式二&#xff1a;使用Bootstrap官方cdn二.Bootstrap容器下面是屏幕宽度在不同大小时不同容器的显示状态三.Bootstrap栅格系统bootstrap网格系统有以下六个类网格系…

上岸!选择你的隐私计算导师!

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…

剑指 Offer 55 - I. 二叉树的深度

摘要 剑指 Offer 55 - I. 二叉树的深度 一、深度优先搜索 如果我们知道了左子树和右子树的最大深度l和r&#xff0c;那么该二叉树的最大深度即为&#xff1a;max(l,r)1。 而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计…

JTT808jt1078

List item 前言 交通部与2016年10月份推出了JT/T 1078-2016标准&#xff0c;全称是<道路运输车辆卫星定位系统视频通信协议> 实时音视频传输指令 实时音视频传输请求 消息 I&#xff24;&#xff1a;&#xff10;x9101。 报文类型&#xff1a;信令数据报文。 平台向终…

C语言深入知识——(1)整形数据和浮点数据的存储

1、数据类型的介绍 类型的意义&#xff1a; 使用对应类型能开辟对应内存空间的大小&#xff08;使用范围&#xff09;还有C语言对待不同类型&#xff0c;会采用不同的内存空间视角来看待一个数据 C语言中类型的基本归类&#xff1a; 整型&#xff08;内置类型&#xff09;浮点…