移动零

作者: 尼小摩 | 来源:发表于2018-06-13 15:04 被阅读5次

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

    示例:

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

    说明:

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

    思路

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

    class Solution {
        public void moveZeroes(int[] nums) {
            int currIndex = nums.length - 1;
            int lastIndex = nums.length - 1;
            
            while (currIndex >= 0) {
                if (nums[currIndex] == 0) {
                    int count = lastIndex - currIndex;
                    for (int i = 0; i < count; i++) {
                        nums[currIndex + i] = nums[currIndex + i + 1];
                    }
                    nums[lastIndex] = 0;
                    lastIndex--;
                }
                currIndex--;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:移动零

          本文链接:https://www.haomeiwen.com/subject/wjvjeftx.html