暴力破解
void moveZeroes(int* nums, int numsSize) {
//思考:我们怎么知道他还没有变成我们想要的结果?
//思路1:如何检查没有移动完成
// 局部修改
// 重复修改操作,直到修改完成
while(true){
int count = 0;
for(int i = 0;i+1 < numsSize; i++){//倒数第二个是i-1,如果倒数第二个是i的话,倒数第一个就会变成i+1就回越界
if(nums[i] == 0&& nums[i+1] != 0){
count++;
nums[i]=nums[i+1];//交换i和i+1的值
nums[i+1] = 0;
break;
}
}
if(count==0){
break;
}
}
return;
}
暴力破解会超时
暴力遍历优化一
void moveZeroes(int* nums, int numsSize) {
//思考:我们怎么知道他还没有变成我们想要的结果?
//思路1:如何检查没有移动完成
// 局部修改
// 重复修改操作,直到修改完成
for(int k=1;k<=numsSize;k++){
for(int i = 0;i+1 < numsSize; i++){//倒数第二个是i-1,如果倒数第二个是i的话,倒数第一个就会变成i+1就回越界
if(nums[i] == 0&& nums[i+1] != 0){
nums[i]=nums[i+1];//交换i和i+1的值
nums[i+1] = 0;
}
}
}
return;
}
第三种
void moveZeroes(int* nums, int numsSize) {
//in-place(原地修改)
//直接写答案
int j=0;
for(int i = 0;i<numsSize;i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(j=j;j<numsSize;j++){
nums[j]=0;
}
return;
}