力扣 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 }
本文来自博客园,作者:宗神一,转载请注明原文链接:https://www.cnblogs.com/zhangmuchen/p/15702743.html