283. 移动零

题目:

思路:

【1】置换的方式(由于0是需要移到后面,倒不如说是非零的要往前挪动,前面有多少个0就需要移动多少格,为了尽量少的动,那么明确的计算出位置只交换一次是最少的,全部非零的都移动完了,也就说明必须要先遍历一遍数组,统计0的个数,和顺便挪动非零的数值,做完了,会发现由于挪动过程中某些0会被覆盖,所以往数组后面补0,补到满足即可,这不会对那些非零的造成问题,甚至你在互换的过程中将数据变动都可以,但是这样变换的操作就会增加)

代码展示:

//时间1 ms 击败 100%
//内存44.1 MB 击败 26.77%
//时间复杂度:O(n,其中 n 为序列长度。每个位置至多被遍历两次。
//空间复杂度:O(1)。只需要常数的空间存放若干变量。
class Solution {
    public void moveZeroes(int[] nums) {
        int count = 0;
        for (int i = 0; i < nums.length; i++){
            if (nums[i] == 0) {
                count++;
            }else {
                nums[i-count] = nums[i];
            }
        }

        while (count > 0) nums[nums.length - count--] = 0;
    }
}

 

posted @ 2023-08-03 12:34  忧愁的chafry  阅读(14)  评论(0编辑  收藏  举报