LeetCode-283. 移动零-Java实现

结果

LeetCode-283. 移动零-Java实现_第1张图片
代码如下:

class Solution {
    public void moveZeroes(int[] nums) {
        int index = -1;
        for(int i = 0;i < nums.length;i++){
            int now = nums[i];
            if(now!=0){
                if(index<0){
                    continue;
                }
                int temp = nums[index];
                nums[index++] = now;
                nums[i] = temp;
            }else{
                if(index < 0){
                    index = i;
                }
            }
        }
    }
}

过程

这道题目整体借鉴的是快排的思路,快排是通过两个指针,分别把大于和小于给定值的数字进行区分,我这里是把0和非0进行区分。当找到第一个0后,把其作为后续非0数字存放的第一个点,这样后续非0数字依序排列在0的位置上,这样既保证了0位于数组最后,也保证了非0数字的顺序不变。这道题还可以进行优化,因为知道要交换的是num[i]和num[index],num[index]是0,所以这里:

 				int temp = nums[index];
                nums[index++] = now;
                nums[i] = temp;

可以变为:

                nums[index++] = now;
                nums[i] = temp;

另外,这道题是第一道手写一次过的题,嗯,开心~

你可能感兴趣的:(LeetCode,数据结构与算法)