leetcode-283

版权声明:本文为博主原创文章,未经博主允许不得转载。 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++;
        }

    }

这个代码真的是很巧妙的!!要多体会几遍

猜你喜欢

转载自blog.csdn.net/zimengxueying/article/details/80218162