標籤:remove 函數 img 簡單 tor hid 數組去重 src 返回
class solution{public: int removeDuplicate(vector<int>& nums) { if(nums.empty()) return 0; int index = 0; for(int i=0;i<nums.size();i++) { if(nums[index]!=nums[i]) nums[++index] = nums[i]; } return index+1; }};
這是給出的第一種方法,發現並不好使,因為實際上是簡單的前移,沒有使得向量容器的實際長度發生變化,因此,改進後的演算法:
class solution{public: int removeDuplicate(vector<int>& nums) { if(nums.empty()) return 0; int index = 0; for(int i=0;i<nums.size();i++) { if(nums[index]!=nums[i]) nums[++index] = nums[i]; } nums.erase(nums.begin()+index+1,nums.end()); return index+1; }};View Code
第二種是利用現有的去重函數unique 在algorithm中,功能是將重複的內容扔到尾部,沒有刪除處理,返回指向非重複尾部的迭代器指標
下面是第二種方法的代碼:
class Solution
{
public:
int removeDuplicates(vector<int>& nums)
{
nums.erase(unique(nums.begin(), nums.end()),nums.end());
return nums.size();
}
};
第一種方法有一定的限制,即數組事先需要經過排序,這裡注意erase的用法,是從當前位置(包含)刪除至尾部位置(不包含)
數組去重