【leetcode-数组】移动零

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

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

思路:使用两个索引lastIndexcurIndexcurIndex从后向前遍历直到其元素为0,然后根据lastIndexcurIndex之间的差值,将元素前移。

class Solution {
    public void moveZeroes(int[] nums) {
        int curIndex = nums.length -1;
        int lastIndex = nums.length -1;
        
        while(curIndex>=0) {
            if(nums[curIndex]==0) {
                int cnt = lastIndex - curIndex;
                for(int i=0;i<cnt;i++) {
                    nums[curIndex+i]=nums[curIndex+i+1];
                }
                
                nums[lastIndex]=0;
                lastIndex--;
            }
            
            curIndex--;
        }
    }
}
发布了205 篇原创文章 · 获赞 219 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/kangbin825/article/details/105149759