LeetCode刷题笔记 | 283 | 移动零 | 双指针 |Java | 详细注释

🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张 原地移除元素2


LeetCode链接:283. 移动零


1.题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

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

示例 2:

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

提示:

  • 1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
  • − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 −231<=nums[i]<=231−1

进阶: 你能尽量减少完成的操作次数吗?

2.题解

  • 注意这道题目需要保证非零元素的相对顺序,而这道题目的相对顺序可以改变:27.移除元素

2.1 双指针 | 一次遍历 | 操作次数多

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        // 使用双指针方法,一次遍历数组
        int left = 0, right = 0;
        
        // 遍历整个数组
        for (right = 0; right < nums.length; right++) {
            // 如果当前元素不是0
            if (nums[right] != 0) {
                // 交换当前元素和左指针指向的元素
                int temp = nums[right];
                nums[right] = nums[left];
                nums[left] = temp;
                // 左指针右移
                left++;
            }
        }
    }
}

2.2 双指针 | 两次遍历 | 操作次数少

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        // 第一次遍历,使用 j 指针记录非零元素的个数
        // 只要是非零元素,就将其赋给 nums[j]
        int j = 0;
        for (int i = 0; i < nums.length; ++i) {
            if (nums[i] != 0) {
                nums[j++] = nums[i];
            }
        }
        
        // 非零元素统计完了,剩下的元素都是零
        // 第二次遍历,将数组末尾的元素都赋值为零
        for (int i = j; i < nums.length; ++i) {
            nums[i] = 0;
        }
    }
}
相关推荐
Theodore_10226 分钟前
深度学习(15):倾斜数据集 & 精确率-召回率权衡
人工智能·笔记·深度学习·机器学习·知识图谱
不会聊天真君6477 分钟前
JavaScript基础语法(Web前端开发笔记第三期)
前端·javascript·笔记
LiLiYuan.19 分钟前
【Java 6种线程状态】
java·开发语言
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.43 分钟前
Redis主从复制配置全攻略
数据库·redis·笔记
foundbug9991 小时前
基于混合整数规划的电池容量优化 - MATLAB实现
数据结构·算法·matlab
itzixiao1 小时前
L1-047 装睡 (5分)[java][python]
java·开发语言·python
用户298698530141 小时前
不用无头浏览器,Java 如何将 HTML 转成图片?
java·后端
自我意识的多元宇宙1 小时前
树、森林——树与二叉树的应用(哈夫曼树的构造)
数据结构
Chengbei112 小时前
红队专属Bing Dork自动化工具,敏感信息侦察效率拉满、自动生成可视化信息泄露审计报告
java·人工智能·安全·web安全·网络安全·自动化·系统安全
海绵宝宝的月光宝盒2 小时前
2-非金属材料
经验分享·笔记·学习·其他·职场和发展·课程设计·制造