description: Given a sorted array,remove the duplicates in place such that each element appear only once and return the new length; Do not allocate extra space for another array,you must do this in place with constant memory. For example,Given input array A = [1,1,2], Your function should return length = 2, and A is now [1,2] code1: //time : O(n), space:O(1) class Solution{ public: int removeDuplicates(vector<int>& nums){ if(nums.empty()) return 0; int index = 0; for(int i = 1; i < nums.size(); i++){ if(nums[index] != nums[i]) nums[++index] = nums[i]; } return index + 1; } }; code2: class Solution{ public: int removeDuplicates(vector<int>& nums){ return distance(nums.begin(),unique(nums.begin(),nums.end())); } } code3: class Solution{ public: return distance(nums.begin(),removeDuplicates(nums.begin(),nums.end(),nums.begin())); } template<typename InIt, typename OutIt> OutIt removeDuplicates(InIt first, InIt last, OutIt output){ while(first != last){ *output++ = *first; first = upper_bound(first,last,*first); } return Output; }
怕什么真理无穷,进一寸有一寸的欢喜。---胡适