每天一到算法题-数组
白话描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes
白话实现:快慢指针 必须考虑第一个为0的情况 官方解还是很简单
class Solution {
public void moveZeroes(int[] nums) {
if((nums.length==0)||(nums.length==1)) return;
int count=0;
for(int i=0;i<nums.length;i++){
if(nums[i]==0) count++;
}
if(count==nums.length) return;
if(nums[0]==0){
int i=0;
while((nums[i]==0)&&i<nums.length){
i++;
}
int tmp=nums[i];
nums[0]=tmp;
nums[i]=0;
}
int i=0;
for(int k=1;k<nums.length;k++){
if(nums[k]!=0){
i++;
nums[i]=nums[k];
}
else{
i++;
while((nums[k]==0)&&k<nums.length-1){
k++;
}
nums[i]=nums[k];
}
}
for(int j=i+1;j<nums.length;j++){
nums[j]=0;
}
}
}