移動零---簡單
阿新 • • 發佈:2019-01-24
總結 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了。
移動零---簡單