力扣 283. 移动零 难度:简单

题目

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

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes

 


解题思路

此题主要麻烦在必须在原数组上操作,这道题我使用三次循环来解决问题。首先通过第一次循环获取到数组中为0的个数,第二次循环则移动非零数的位置,第三次循环则给应该为零的数位置赋值。第二次和第三次必须要分开因为数组中最后可能存在非零数。

 


 1 class Solution {
 2     public void moveZeroes(int[] nums) {
 3        //0的个数
 4         int zeroNum = 0;
 5         //非零数的新位置指针
 6         int cur = 0;
 7         //先获取0的个数
 8         for(int i=0;i<nums.length;i++){
 9             if(nums[i]==0)
10                 zeroNum++;
11         }
12         //0的位置指针
13         int curZero = nums.length - zeroNum;
14         for(int k=0;k<nums.length;k++){
15             if(nums[k] != 0){
16                 nums[cur] = nums[k];
17                 cur++;
18             }
19         }
20         for(;curZero<nums.length;curZero++){
21             nums[curZero] = 0;
22         }
23 
24 
25     }
26 }

 

posted @ 2021-12-17 16:14  宗神一  阅读(26)  评论(0编辑  收藏  举报