当前位置: 首页 > news >正文

每日一题:移动零

文章目录

  • 一、题目
  • 二、题目分析
  • 三、算法分析
  • 四、代码

一、题目

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

二、题目分析

有题目可以知道,这个主要是让我们将这个数组中的零和非零元素进行分离,并且保证非零元素的相对顺序。

三、算法分析

1、朴素法

我们先不考虑用什么算法进行解答,如果只用朴素法的话,我们肯定是先从左往右找到第一个零元素和第一个非零元素,然后将这两个数据进行交换,然后接着往后找到第二个零元素和非零元素进行交换,直到指向零元素的指针指向了数组的尾部结束。

2、双指针算法

如果用双指针算法呢?

image-20240912000305244

当num[cur] == 0的时候,不做处理。

当num[cur] != 0的时候,交换dest+1和cur位置的元素。

四、代码

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

http://www.mrgr.cn/news/24873.html

相关文章:

  • gdb调试64位程序错误
  • 每日OJ_牛客_合唱团(打家劫舍dp)
  • 【佳学基因检测】在EXCEL中,如何获取A列的第9-29个字符,将其填入另一列中
  • 【MySQL】表的操作【有关表结构的操作】【创建、查看、删除、修改表结构】
  • 【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类
  • 0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现
  • AVL树的模拟实现(插入,验证)
  • 计算机三级网络技术总结 第十一章网络管理技术
  • 「数学::质数」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
  • LJS送给WSW的生日礼物——happy birthday to my dear friend————(作者:LJS)
  • 速盾:cdn加速效果明显吗?
  • 【佳学基因检测】在织梦网站中, 创建或修改目录:/var/www/html/cp 失败! DedeTag Engine Create File False
  • 【Java自动化学习】接口自动化
  • Shell脚本计算π的近似值
  • Visual Studio安装教程
  • 在长度 2N 的数组中找出重复 N 次的元素
  • 新的 PIXHELL 攻击从隔离系统中窃取机密
  • scene graph generation 计算mean recall数据的过程:
  • Java重修笔记 第五十四天 坦克大战(三)事件处理机制
  • 手写Promise