Leetcode 283 Move Zeroes
移动零(Move Zeroes)
给定一个数组 nums
,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
C语言版本:
void moveZeroes(int* nums, int numsSize){
while(true){
int count = 0;
for (int i =0;i+1<numsSize;i++) {
if(nums[i]==0 && nums[i+1]!=0) {
count++;
int temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
break;
}
}
if (count==0)break;
}
}
这样会超时,去掉第一个break就能过
模仿冒泡排序:
void moveZeroes(int* nums, int numsSize){
for (int k=0;k<numsSize;k++){
for(int i=0;i+1<numsSize;i++){
if(nums[i] == 0 && nums[i+1] !=0){
nums[i]= nums[i+1];
nums[i+1]=0;
}
}
}
}
但是这种方法会更慢
直接写答案:
void moveZeroes(int* nums, int numsSize){
int j =0;
for(int i =0;i<numsSize;i++){
if(nums[i]!=0){
nums[j] = nums[i];
j++;
}
}
for (;j<numsSize;j++){
nums[j]=0;
}
}
也可以创建一个新的数组,来暂存,但是没有这种方法效率高.