刷题笔记:day 1

news2024/11/25 20:13:20

力扣  283 移动零

解法一:双指针

定义一个指针  cur  去遍历数组 ; 定义一个指针 dest 去指向已处理区间中,非零的最后一个位置。

然后让 指针 cur 遇到 0 ,就往后走 ; 遇到的数不是 0 ,就与 dest指针的下一个数交换位置,直至将数组遍历结束为止。

cur 指向不是0 的位置

让dest+1位置的数与cur 位置的数交换,swap(nums[cur], nums[dest+1)

 

 两个指针的向前走一步。

代码实现:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int dest = -1;
        int cur = 0;
        while(cur < nums.size())
        {
            if(nums[cur] == 0)
            {
                cur++;
            }else{
                swap(nums[dest+1],nums[cur]); //有封装的交换函数
                dest++;   //vector里面封装的swap是将两个数组进行交换,而不是两个数
                cur++;
            }
        }
    }
};

 解法二:

同样使用双指针,i 和 j ,不过不是使用交换,而是将后面的非零元素覆盖前面的0元素。

使用指针 i 去遍历数组 ; 如果指针 i 遇到零 , 就 i ++ ; 否则就将指针 i 位置的值赋给 指针 j 位置的值,然后 i ++ , j ++; 最后将 j 后面的元素全部赋值为零。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int i = 0, j = 0;
        while(i<nums.size())
        {
            if(nums[i] ==0)
            {
                i++;
            }else{
                nums[j] = nums[i];
                j++;
                i++;
            }
        }
        //将 j 后面的元素赋值为0 
        while(j<nums.size())
        {
            nums[j] = 0;
            ++j;
        }
    }
};

解法三:

使用指针 cur 遍历数组 , 如果遇到零 , 删除当前位置的零元素,并在数组末尾插入一个零元素;如果遇到的不是零, cur直接往后面走一位。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int len = nums.size();  // 用len来限制循环次数
        int cur = 0 ;
        while(len > 0)
        {
            if(nums[cur] ==0)
            {
                nums.erase(nums.begin()+cur);
                nums.push_back(0);
            }else{
                ++cur;
            }
            --len;
        }
    }
};

解法四:

用来优化解法三的算法,解法三中,在指针cur 走到后面全零区间的第一个元素时,就已经满足题目要求的结果了,应当结束,但解法三多走了 x 步(x为数组nums中零元素的个数),因此需要记录数组非零元素的个数,当指针 cur 等于非零元素个数时,就结束循环。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int count = 0; // 记录数组非零元素的个数
       for(int i = 0 ; i< nums.size();++i)
       {
           if(nums[i] !=0)
           {
               ++count;
           }
       }
        int cur = 0 ;
        while(cur < nums.size())
        {
            if(nums[cur] ==0)
            {
                if(cur == count)
                {
                    break;
                }
                nums.erase(nums.begin()+cur);
                nums.push_back(0);
            }else{
                ++cur;
            }
        }
    }
};

 

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

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

相关文章

C语言结构体讲解

目录 结构体的声明 结构的基础知识 结构的声明 为什么要出现结构体&#xff1f; 结构成员的类型 结构体变量的定义和初始化 定义&#xff1a;&#xff08;全局变量//局部变量&#xff09; 初始化&#xff1a; 结构体成员的访问 结构体传参 结构体的声明 结构的基础知识…

会议oa系统项目部署流程

目录 1.项目部署环境 2.初始化数据库 2.1获取数据库脚本 2.2创建数据库 1.创立数据库连接 2.创建数据库&#xff0c;命名 3.运行sql文件 4.查看导入数据 ​编辑 ​编辑 3项目环境部署 3.1导入项目资源 3.2加载框架 加载成功标志 服务器配置&#xff08;用来保存排…

详解跨境电商ERP开发的核心技术

跨境电商行业的蓬勃发展为企业带来了前所未有的机遇&#xff0c;然而&#xff0c;成功经营跨境电商业务需要高效的管理和操作。在这方面&#xff0c;跨境电商ERP系统成为了关键的工具&#xff0c;能够整合各个业务环节&#xff0c;实现高效运作和优化决策。本文将详解跨境电商E…

一文看懂kubernetes部署:持久卷的安装

持久卷的安装 NFS服务的建立 为了实现elasticsearch以及rabbitmq的数据持久化&#xff0c;需要在k8s中建立持久卷&#xff0c;我们采用nfs方式建立持久卷。 对于持久卷的结构规划如下&#xff1a; 关于索引的磁盘占用&#xff1a; 请根据业务的数据量情况来规划持久卷硬件的情…

android Android Studio Giraffe | 2022.3.1 版本Lombok不兼容 解决方案

android Android Studio Giraffe | 2022.3.1 版本Lombok不兼容 解决方案 1.查看当前的android studio 版本 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 2.打开 idea 官网下载页面 idea下载历史版本 找到对应的版本编号…

P5691 [NOI2001] 方程的解数(内附封面)

[NOI2001] 方程的解数 题目描述 已知一个 n n n 元高次方程&#xff1a; ∑ i 1 n k i x i p i 0 \sum\limits_{i1}^n k_ix_i^{p_i} 0 i1∑n​ki​xipi​​0 其中&#xff1a; x 1 , x 2 , … , x n x_1, x_2, \dots ,x_n x1​,x2​,…,xn​ 是未知数&#xff0c; k 1 ,…

RabbitMQ 教程 | 第5章 RabbitMQ 管理

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

如何理解单例模式? _

例模式(Singleton Pattern)&#xff1a;采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 通俗点来讲&#xff1a;就是一个男人只能有一个老婆&#xff0c;一个女人只能有一个老公 单例模…

【流量卡奸商自白书】:坑很多,多多少少你得跳一个!

大家好&#xff0c;今天这期短文咱们来讲讲流量卡奸商的自白书&#xff0c;打破你的认知&#xff01;话说虽然没有胆子虚假宣传&#xff0c;没有胆子不给售后&#xff0c;但是呢&#xff0c;整活忽悠消费者来办卡的胆子还是有的&#xff0c;而且还不小。 ​ 作为一个流量卡奸商…

ALLEGRO之Help

本文主要介绍ALLEGRO的Help菜单。 &#xff08;1&#xff09;Documentation&#xff1a;弹出帮助文档&#xff1b; &#xff08;2&#xff09;Whats New&#xff1a;介绍新特性&#xff1b; &#xff08;3&#xff09;Search&#xff1a;暂不清楚&#xff1b; &#xff08;4…

面试之多线程案例(四)

1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c;让所有需要调用的地方都共享这一单例对象。…

SSL原理详解

SSL协议结构&#xff1a; SSL协议分为两层&#xff0c;下层为SSL记录协议&#xff0c;上层为SSL握手协议、SSL密码变化协议和SSL警告协议。 1.下层为SSL记录协议&#xff0c;主要作用是为高层协议提供基本的安全服务 建立在可靠的传输之上&#xff0c;负责对上层的数据进行分块…

HDFS集群黑白名单机制

HDFS集群黑白名单机制 白名单黑名单 白名单 所谓白名单指的是允许哪些机器加入到当前的HDFS集群中&#xff0c;是一种准入机制白名单由dfs.hosts参数指定&#xff0c;该参数位于hdfs-site.xml.默认值为空dfs.hosts只想文件&#xff0c;该文件包含允许链接到namanode的主机列表…

OpenCVForUnity(九)图片模糊

文章目录 前言一、归一化框滤波器使用blur方法来实现 二、高斯滤波器使用GaussianBlur方法实现 三、中值滤波器使用medianBlur方法实现 四、双边过滤器使用bilateralFilter方法实现 结语 前言 本教程将介绍使用OpenCV中的多种线性滤波器来对图像进行平滑处理&#xff0c;主要包…

程序员面试IT技术岗的三大技巧

文章目录 技巧一&#xff1a;深入研究意向企业技巧二&#xff1a;准备常见的面试问题技巧三&#xff1a;总结经历的面试题 在找工作时&#xff0c;面试是每位程序员必须经历的一关。面对众多求职者竞争激烈的情况&#xff0c;我们需要结合自己的现状&#xff0c;针对意向企业做…

复习第三章反射+IO流

一、反射 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机…

在使用Python爬虫时遇到503 Service Unavailable错误解决办法汇总

在进行Python爬虫的过程中&#xff0c;有时会遇到503 Service Unavailable错误&#xff0c;这意味着所请求的服务不可用&#xff0c;无法获取所需的数据。为了解决这个常见的问题&#xff0c;本文将提供一些解决办法&#xff0c;希望能提供实战价值&#xff0c;让爬虫任务顺利完…

机器人科普--AGILOX 叉车

机器人科普--AGILOX 叉车 1 概述2 导航3 驱动轮组4 叉举参考 1 概述 AGILOX 叉车&#xff0c;不需要画地图路径&#xff0c;很厉害。 2 导航 中间路径自由导航&#xff0c;末端规划出轨迹路线&#xff0c;并使用优良的控制器做轨迹追踪。 AGILOX &#xff5c; 10 Min setu…

mysql安装教程保姆级

MySQL免安装本地运行 1.下载MySQL2.创建install.bat3.init.sql 初始创建4.环境变量配置5.运行 install.bat 管理员权限运行6.连接成功遇到的问题 1.下载MySQL ①地址&#xff1a;https://downloads.mysql.com/archives/community/ ②解压 2.创建install.bat 放在mysql>b…

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)效果一览基本介绍程序设计参考资料效果一览 基本介绍 1.MATLAB实现GRNN广义回归神经网络时间序列预测(完整源码和数据) …