日常刷题记录

移动零


题目链接

移动零

题目描述

给定一个数组 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;
            }
        }
    }
}
相关推荐
地平线开发者11 小时前
模型部署|如何解决算子约束
深度学习·算法·自动驾驶
需要82611 小时前
Arthas 一个命令排查线上问题
java·jvm·spring·spring cloud
Kyrie_kk11 小时前
Java--ProcessBuilder操作系统进程
java·后端
SamDeepThinking11 小时前
关于java final关键字的可见性
java·后端·面试
Navigator_Z12 小时前
LeetCode //C - 1254. Number of Closed Islands
c语言·算法·leetcode
deepseek2312 小时前
GPT-6 Astra 破解 FrontierMath 九年悬案拆解:调和熵投票规则反证核恒非空,局部搜索如何终结反例悬赏
人工智能·算法·ai agent
Wang's Blog12 小时前
Java 项目实战: 外卖平台-MyBatis-Plus分页插件与员工分页查询
java·项目开发
MetaLite12 小时前
全网最好的SpringBoot接口请求对象设计
java·spring boot·后端
蜗牛互联网12 小时前
AI给面试打分不够,求职者更需要可核对的证据
java·人工智能·后端
syagain_zsx12 小时前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和