283. 移动零[简单]✅

283. 移动零

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

思路: 采用 双指针

核心思想:

一个指针寻找非零元素,另一个指针记录下一个非零元素应该放的位置。

具体过程:

  • i 遍历整个数组,寻找非零元素。

  • i0 指向下一个非零元素应该放的位置。

  • 当找到非零元素时,与 i0 位置交换,并将 i0 后移一位。

  • 遍历结束后,所有非零元素都移动到前面,所有 0 自然移动到末尾。

时间复杂度: O(n)

空间复杂度: O(1)

复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int i0 = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                // 交换 nums[i] 和 nums[i0]
                int tmp = nums[i];
                nums[i] = nums[i0];
                nums[i0] = tmp;
                i0++;
            }
        }
    }
}
相关推荐
李少兄6 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh7 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
啦啦啦啦啦zzzz7 小时前
Logger的组装(c++20)
c++·算法·c++20
Tangyuewei7 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界8 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
尾善爱看海8 小时前
前端算法与手写题集
前端·算法
繁星蓝雨8 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
程序员阿鹏9 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
Evand J9 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
AI 思录9 小时前
Prompt 事故档案(八):日常表达被标为“待校准”,AI 的爹味语法从哪里来
大数据·人工智能·算法·prompt·用户体验·ai合规