Rust 移动零

2023-11-06

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

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

力扣icon-default.png?t=N176https://leetcode.cn/problems/move-zeroes/

Rust代码,参考注释:

使用后快慢指针

// 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
// 请注意 ,必须在不复制数组的情况下原地对数组进行操作。

fn main() {
    // 声明可变变量
    let mut vec : Vec<i32> = vec![0,1,0,3,12];

    // 借用vec,所有权不转移
    move_zero(&mut vec);

    // {:?} ,用于将数据类型实现了Debug特性的数据打印到控制台。
    println!("{vec:?}");
}

// 快慢指针:先创建两个指针slow,fast,慢指针slow记录最终的结果,快指针fast用来遍历整个数组,当fast遍历时遇到!0的值时,把fast当前指向的值付给slow,并且slow向后移动一位,当fast遍历完成后,剩余元素全是0,这时就要从slow开始第二次遍历数组,把剩余位置全赋值为0。
// 引用vec变量,方法结束后交还所有权
fn move_zero(vec : &mut Vec<i32>) {
    let mut fast = 0;
    let mut slow = 0;

    while fast < vec.len() {
        if vec[fast] != 0 {
            vec[slow] = vec[fast];
            slow+=1;
        } 
        
        fast+=1;
    }

    while slow <vec.len(){
        vec[slow] = 0;
        slow +=1;
    }

}


#[cfg(test)]
mod tests {
    use super::*;
    
    #[test]
    fn test_move() {
        let mut v : Vec<i32> = vec![0,1,0,3,12];
         move_zero(&mut v);
        println!("{:?}", v);
        // 判断两个数组相等
        assert_eq!(v, [1,3,12,0,0]);
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 移动零 的相关文章

随机推荐

  • MyBatis基本操作及概念

    MyBatis 一 Mybatis简介 1 1 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyB
  • 手工编译内核驱动模块时安装和添加modules.order

    手工编译内核驱动模块在当前路径下生成 ko insmod可以加载 但实际一般采用cp或者install安装到 lib modules 下面去 但modinfo modprobe是找不到的 还需要把模信息写到modules order文件里
  • 解决Python的AttributeError: module ‘base64‘ has no attribute ‘b64decode‘问题(参数为str类型)

    小编也是一名网络新手 最近在做一道base64解密的题目时 出现了module base64 has no attribute decodestring 的报错提示 网上有很多说法 下面我列举三种方法 大家都可以去试一试 方法如下 1 查看
  • 记一次晚上帮朋友处理文档名称的问题---正则表达式

    通过你的问题让我虎骨了一下正则表达式 因为最近工作很少用到这个知识点 所以记录一下 这个知识在文档处理有很重要的作用 而且功能也特别强大 问题 批处理文档的文件名 处理成要求的格式 用到的技术 正则表达式
  • 前端学习之Ajax

    文章目录 一 客户端与服务器 1 概念 二 URL地址 1 概念 2 URL地址的组成部分 三 分析网页的打开过程 1 理解客户端和服务器的通信过程 2 基于浏览器的开发者工具分析通信过程 四 服务器对外提供了哪些资源 1 网页常见的资源
  • GBase8s BYTE 和 TEXT 数据类型

    GBase 8s BYTE 和 TEXT 数据类型 以及如何以 JDBC API 来操纵这些数据 类型的列 BYTE 数据类型是在不可分的字节流中存储任何数据的简单大对象数据类型 此二进制数 据的示例包括电子表格 数字化的语音模式以及视频片
  • vue中使用事件监听addEventListener()来实现回车登录功能

    在开发中需要做一个点击回车按钮来实现登录的功能 使用到事件监听 事件监听addEventListener 用法 参照文献 菜鸟教程 addEventListener event function useCapture 参数一event 必须
  • Vue基础精讲 —— 规范代码三步走?关于eslint和editorconfig以及precommit的安装和使用

    eslint ESLint 是一个语法规则和代码风格的检查工具 可以用来保证写出语法正确 风格统一的代码 ESLint最初是由Nicholas C Zakas 于2013年6月创建的开源项目 它的目标是提供一个插件化的 javascript
  • 吴恩达深度学习作业_吴恩达深度学习第一部分第二周作业打卡

    1 What does a neuron compute A A neuron computes the mean of all features before applying the output to an activation fu
  • keil不能进调试模式的解决方法

    一 问题现象 平时用烧录器调试程序一直都没问题 突然今天不能调试了 故障提示如下 二 问题分析 尝试过各种解决方法 插拔烧录器 更换烧录器 插拔stm32主机电源 重启keil开发环境 问题依旧 看来问题不应该在主机和烧录器上 最后问题定位
  • spec文件

    spec文件 spec文件是配置规范文件 是RPM软件包编译过程的核心 它说明了软件包如何被配置 打那些补丁 安装哪些文件 安装到哪里 安装过程需要哪些系统级别活动 标签说明 依赖关系 Dependencies BuildRequires
  • 线上项目路由跳转报错 Loading chunk failed

    场景 线上PC端项目点击左侧路由菜单栏进行页面跳转时点击无反应并报错 Loading chunk failed 原因 经查阅资料找出原因 项目使用了路由懒加载 路由懒加载的情况下 访问当前应用进行路由跳转时都是实时动态的从服务器上拉取相应模
  • Python 递归函数返回值为 None 的解决办法

    在使用 Python 开发的过程中 避免不了会用到递归函数 但递归函数的返回值有时会出现意想不到的情况 下面来举一个例子 gt gt gt def fun i i 1 if i lt 5 fun i else return i gt gt
  • 【转载】做好功能测试,这8项必备技能了解一下!

    原文链接 功能测试是测试工程师的基础功 很多人功能测试还做不好 就想去做性能测试 自动化测试 很多人对功能测试的理解就是点点点 如何自己不用心去悟 去研究 那么你的职业生涯也就停留在点点点上了 在这里 我把我对功能测试的理解写下来 那么 功
  • Can not load Open Client,please verify that libct.dll and libcs.dll are in your

    Can not load Open Client please verify that libct dll and libcs dll are in your path Please make sure your version of Op
  • C++ 函数模板与类模板template,以及具体化、实例化

    函数模板 需要创建针对不同参数类型的实现相同功能的不同函数 注 模板不能缩短可执行程序 最终仍是有多个独立的函数定义 另 若对不同类型的参数执行不同的算法 可以重载模板定义 前提是两函数的特征标不同 例 template
  • arduino+oled显示字

    OLED 显示屏有四个引脚 分别是 SDA 数据线 SCK 时钟线 VDD 3 3V GND 在UNO开发板上I2C接口 SDA对应D4 SCK对应D5 在MEGA2560开发板上I2C接口 SDA对应D20 SCL对应D21 首先下载一个
  • 随笔 笔记

    一 ES6数组去重结果 new set array 二 cmd 管理员身份运行 ipconfig flushdns 刷新dns 有时某个网站进不去就刷新一下 比如echarts中文官网 三 检查元素中 快速搜索文件所在位置 浏览器打开 f1
  • 顶尖程序员不同于常人的 5 个区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt The Effective Engineer 的作者在写书的过程中 为了了解那些顶级程序员和普通程序员的区别 采访了很多硅谷顶级科技公司的顶尖软件工程师 他发现这些给世界带
  • Rust 移动零

    给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下原地对数组进行操作 力扣https leetcode cn problems move zeroes Rust代码