自学内容网 自学内容网

LeetCode100之移动零(283)--Java

1.问题描述

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

        注意

        必须在不复制数组的情况下原地对数组进行操作

        示例1

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

        示例2 

输入: nums = [0]输出: [0]

        提示

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

        难度等级

                简单

        题目链接

                移动零

2.解题思路

        这道移动零的题,典型的双指针问题,定义一个指针用来遍历数组(指针i),另一个指针来将非0元素移动到数组前面(指针p)。

     int p1 = 0;
     for(int i = 0;i < nums.length;i++){
        if(nums[i] != 0){
            nums[p1++] = nums[i];
        }
     }

        经过一个for循环之后,所有的非0元素都被移动到了数组的前面,然后再用一个循环将数组后面剩余的地方全部置为0就好了。

     while(p1 < nums.length){
        nums[p1++] = 0;
     }

3.代码展示

class Solution {
    public void moveZeroes(int[] nums) {
     int p1 = 0;
     for(int i = 0;i < nums.length;i++){
        if(nums[i] != 0){
            nums[p1++] = nums[i];
        }
     }
     while(p1 < nums.length){
        nums[p1++] = 0;
     }
     
    }
}

4.总结

        这道题没啥我觉得,就是一个拿数,一个写数。大家就看个乐呵就行啦。


原文地址:https://blog.csdn.net/2301_79318558/article/details/143374923

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!