初级算法-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 }