初级算法-8.移动零

题目描述:

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

示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
1.必须在原数组上操作,不能拷贝额外的数组。
2.尽量减少操作次数。

分析:不断将第一个0与它右边第一个非0交换位置,直到右边全为0

 1 class Solution {
 2     public void moveZeroes(int[] nums) {
 3        
 4         int i=0,j=0;//i:第一个0下标,j:对应右边第一个非0下标
 5         while(i<nums.length&&j<nums.length)
 6         {  
 7             if(i<j)//交换
 8             {   
 9                 nums[i]=nums[j];
10                 nums[j]=0;
11                 i++;j++;
12             }
13             else  
14                 j=i+1; //从第一个0后开始找非0
15         //找到第一个0
16              while(i<nums.length)
17              {
18                 if(nums[i]==0)
19                     break;
20                 else
21                     i++;
22              }
          //找到第一个非0
23 while(j<nums.length-1) 24 { 25 if(nums[j]==0) 26 j++; 27 else 28 break; 29 } 30 31 } 32 } 33 }
原文地址:https://www.cnblogs.com/hzhqiang/p/10771491.html