力扣283.移动零

题目链接:283. 移动零 - 力扣(LeetCode)

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

解法一:

思路:双指针

左指针 i 指向已经排好序的数组的的下一个位置,右指针 j 指向要处理的位置。

初始化 i=0, j=0

右指针 j 所在位置元素为0:右指针右移一位

右指针 j 所在位置元素不为0:j 所在位置元素赋值给 i 所在位置,左指针右移一位,右指针右移一位

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int i=0,j=0;
        while(j<nums.length){
            if(nums[j]==0){
                j++;
            }else{
                nums[i]=nums[j];
                i++;
                j++;
            }
        }
        for(int k=i;k<nums.length;k++){
            nums[k]=0;
        }
    }
}

解法二:

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int j=0;//非0元素个数
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                nums[j]=nums[i];
                j++;
            }
        }
        for(int i=j;i<nums.length;i++){
            nums[i]=0;
        }
        
    }
}
相关推荐
wen__xvn2 分钟前
基础数据结构第08天:栈(实战篇)
数据结构·c++·算法
玄鱼殇3 分钟前
前端排序算法
算法·排序算法
tqs_1234511 分钟前
倒排索引数据结构
java·前端·算法
a程序小傲14 分钟前
听说前端又死了?
开发语言·前端·mysql·算法·postgresql·深度优先
副露のmagic15 分钟前
python基础复健
python·算法
bclshuai18 分钟前
深度学习算法辅助股票分析
人工智能·深度学习·算法
mit6.82420 分钟前
437贪心
算法
hetao173383720 分钟前
2026-01-19~20 hetao1733837 的刷题笔记
c++·笔记·算法
秋刀鱼程序编程41 分钟前
Java编程基础入门(四)---选择循环语句
java·开发语言·算法
wen__xvn44 分钟前
基础算法集训第04天:选择排序和冒泡排序
数据结构·算法·leetcode