leetcode 283.移動零

第一種解法:用空間換時間,設倆個值i,j相當於兩個指針,i指向0,j指向非0,j遇到非0,將j的值賦值i,如果i與j不相等,i的值就賦予0

時間複雜度 O(n)      空間複雜度O(1)

java描述

public void moveZeroes(int[] nums) {
        int j=0;
        for (int i=0;i<nums.length;++i){
            if (nums[i]!=0){
                nums[j]=nums[i];
                if (i!=j){
                    nums[i]=0;
                }
                ++j;
            }
        }
    }

C++描述

void moveZeroes(vector<int>& nums) {

          int j = 0;

          for(int i = 0;i<nums.size();i++) {

              if (nums[i] != 0) {

                  nums[j] = nums[i];

                  if(i != j){

                      nums[i] = 0;

                  }              

                  j++;

              }

          }

    }

 

第二種解法:兩個循環,第一個循環將非零值從小標爲0開始填入,第二個循環接着後面填入0

時間複雜度 O(n)      空間複雜度O(1)

java描述

public void moveZeroes(int[] nums) {

       int noneZeroFundAt = 0;

       for (int i = 0; i < nums.length; i++){

           if (nums[i] != 0){

               nums[noneZeroFundAt++] = nums[i];

           }

       }

       for (int i = noneZeroFundAt; i < nums.length; i++){

           nums[i] = 0;

       }

    }

C++描述

void moveZeroes(vector<int>& nums) {

        int lastNoneZeroFundAt = 0;

        for (int i = 0; i < nums.size(); i++){

            if (nums[i] != 0){

                nums[lastNoneZeroFundAt++] = nums[i];

            }

        }

        for (int i = lastNoneZeroFundAt; i < nums.size(); i++){

            nums[i] = 0;

        }

    } 

 

第三種解法:倆個值,相當於兩個指針,遇到非零的就互換

時間複雜度 O(n)      空間複雜度O(1)

c++ 解法

void moveZeroes(vector<int>& nums) {

       for (int lastNoneZeroFundAt = 0, cur = 0; cur < nums.size(); cur++){

           if(nums[cur] != 0){

               swap(nums[lastNoneZeroFundAt++], nums[cur]);

           }

       }

    } 

第四種解法:滾雪球解法

時間複雜度 O(n)      空間複雜度O(1)

public void moveZeroes(int[] nums) {

        int snowBallSize = 0;

        for (int i = 0; i < nums.length; i++) {

            if (nums[i] == 0) {

                snowBallSize++;

            }else if (snowBallSize > 0) {

                int temp = nums[i];

                nums[i] = 0;

                nums[i - snowBallSize] = temp;

            }

        }

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章