1. 程式人生 > >移動零---簡單

移動零---簡單

總結 clas style int 時間 技術分享 The bubuko ++

題目:

  給定一個數組nums,編寫一個函數將所有0移動到數組的末尾,同時保持非零元素的相對順序。

示例:

  輸入: [0,1,0,3,12]

  輸出: [1,3,12,0,0]

思路:

  典型的雙指針題目,用一個指針找到0,用另一個指針找到非零,兩者交換,同時保證非零的指針較小。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int length=nums.size();
        int i=0,j=0;
        while(i<length&&j<length)
        {
            
while(i<length&&nums[i]!=0) //find the num which is zero { i++; } j=i+1; while(j<length&&nums[j]==0) //not zero { j++; } if(i<length&&j<length) { std::swap(nums[i],nums[j]); i
+=1;j+=1; } } } };

技術分享圖片

  時間復雜度為O(n),看起來比較糟糕。看一下大佬的:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        auto it=nums.begin();
        for(int i=0;i<nums.size();it++,i++ )
        {
            if(*it==0)
            {
                nums.erase(it
--); nums.push_back(0); } } } };

  呀,看來我對vector還用不熟,看來有必要總結一下stl的vector了。

移動零---簡單