日常刷题记录

移动零


题目链接

移动零

题目描述

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

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

复制代码
输入: nums = [0]
输出: [0]

算法原理

快排的思想:数组划分区间、数组分块
双指针算法:利用数组下标来充当指针

  • 两个指针的作用:

    • cur:从左往右扫描数组,遍历数组
    • dest:已处理的区间内,非零元素的最后一个位置

    三个区间:

    0, dest :非零元素

    dest + 1, cur - 1 : 零元素

    cur, n - 1:待处理元素

算法流程



以此类推,直到扫描完整个数组

算法代码

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int cur = 0, dest = -1;
        for (; cur < nums.length; cur++) {
            if (nums[cur] != 0) {
                dest++;
                int temp = nums[cur];
                nums[cur] = nums[dest];
                nums[dest] = temp;
            }
        }
    }
}
相关推荐
程序员黑豆4 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
江畔柳前堤5 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
hey_sml5 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo5 小时前
数据结构-环形链表
java·数据结构·链表
Forever Nore6 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
萧瑟余晖7 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才7 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio8 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
罗西的思考8 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX9 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm