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++;
            }
        }
    }
}
相关推荐
谢亮_vipxieliang5 分钟前
Stream API 不是银弹:常见坑与性能建议
java·开发语言
小O的算法实验室13 分钟前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法
迅猛龙办公室18 分钟前
实现第一个python程序(HelloWorld)
开发语言·python
phltxy21 分钟前
C 语言动态内存管理:从申请空间到安全释放
c语言·开发语言·ui
可乐鸡翅yeah_25 分钟前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_9658966236 分钟前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
拉格朗日(Lagrange)39 分钟前
【第2 章】WorkBuddy 从入门到高手
开发语言·python
yujunl41 分钟前
在U9C订单列表上开放多个按钮层叠的问题解决
开发语言
字节跳动的猫1 小时前
LikeShop 积分体系全链路改造:获取规则、订单抵扣与积分商品兑换二开
运维·数据结构
可乐ea1 小时前
AI Agent 工具调用准确性评测:选择错误与参数错误分开测
大数据·人工智能·算法·大模型·工具调用·ai智能体·agent评测