版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zimengxueying/article/details/80218162
题目要求 ,将所有0移动到数组的最后
时间O(n),不能开辟新的数组
1 一开始破坏了数组的有序性
{
int i,j;
i=0;j=numsSize-1;
while (i<j){
if(nums[i]==0){
int temp;
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
j--;
}
i++;
}
2 其实这道题之前有看到,但是由于可能没有把题目吃透就忘记了
这种方法就是0后所有的非0数向前移动zeros个单位,zeros是当前0的个数
int zeros=0;
int i;
for(i=0;i<numsSize;i++){
if(nums[i]!=0){
nums[i-zeros]=nums[i];
}
else{
zeros++;
}
}
for(i=numsSize-1;i!=numsSize-zeros-1;i--){
nums[i]=0;
}
3 思想是和快排很像
将整个数组分为0,非0,还未走过的。
int i,j;
i=0;j=0;
while(i!=numsSize){
if(nums[i]!=0){
int temp;
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
i++;
j++;
}
else{
i++;
}
}
这个代码真的是很巧妙的!!要多体会几遍