刷题专栏(十九):移动零

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

前言

刷题专栏到目前已经是第十九篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天的这道题,依然是数组相关的题目,主要是数组元素的位置移动。

在很多的排序算法中会有相关的位置移动,大家如果没有思路可以去看一下。

下面我们就一起来看一下具体的题目解读吧。

image.png

算法题:移动零

从本道题的描述来看,是想将一个数组中的0,后移到尾部位置。

比如示例中的nums = [0,1,0,3,12], 然后最后的预期结果变成[1,3,12,0,0]

一般要处理这种情况,只需要利用排序算法来进行元素的移动即可。

但是这里有一个特殊的情况,那就是只是将0后移到最后,我们就可以不用置换元素了。

可以直接去覆盖0即可。

在每次遍历到0的时候,只需要去通过二重循环来获取下一个不为0的数字元素即可。

然后将不为0的数字元素赋值到当前索引值下。

然后在将原有数字赋值为0。

以此就能达到预期的效果了,接下来看一下具体代码吧。

代码展示

代码没有选择直接移动,而是直接去获取了0后面的非0元素。

代码如下,大家可以自行去试一下。

public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums = new int[]{0,1,0,3,12};
        solution.moveZeroes(nums);
        System.out.println(Arrays.toString(nums));
    }

    public void moveZeroes(int[] nums) {

        for (int i = 0; i < nums.length; i++) {
            if(nums[i] == 0){
                int index = i + 1;
                while (index < nums.length){
                    int n = nums[index];
                    if(n == 0){
                        index++;
                    }else{
                        nums[i] = n;
                        nums[index] = 0;
                        break;
                    }
                }
            }
        }
    }

}

代码执行结果

执行结果好惨,但总归是通过提交了。

image.png

总结