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++;
            }
        }
    }
}
相关推荐
一只小小的芙厨2 小时前
基础数论总结
笔记·学习·算法
动词ing2 小时前
【C语言】结构体+文件基础
c语言·开发语言·数据结构
caimouse2 小时前
ReactOS 窗口系统分析(7):分层窗口与绘制辅助 — layered.c + draw.c
c语言·开发语言
丰锋ff3 小时前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
夜不会漫长3 小时前
C++入门(1)
开发语言·c++·算法
大鹏说大话3 小时前
从爬虫到决策引擎:大数据下自媒体如何用Python挖掘用户痛点
开发语言·爬虫·python
Niuguangshuo3 小时前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
哭哭啼4 小时前
JAVA服务问题诊断
java·开发语言·jvm
wen_zhufeng4 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习