题目:
一组有序数组,删掉重复元素,返回剩下几个元素。
思路1:
利用set。
int removeDuplicates(vector<int>& nums) {
set<int> st;
for (auto i : nums)
st.insert(i);
nums.clear();
for (auto i : st)
nums.push_back(i);
return nums.size();
}
思路2:
删除重复元素。
int removeDuplicates(vector<int>& nums) {//20%
int sz = nums.size();
auto beg = nums.begin();
for (int i = 1; i < sz; ++i)
if (nums[i] == nums[i - 1]) {
nums.erase(beg + i--);
--sz;
}
return sz;
}
思路3:
把非重复元素覆盖在前面。
int removeDuplicates(vector<int>& nums) {
int sz = nums.size();
int i = 0;
for (int j = 1; j < sz; ++j)
if (nums[j] != nums[i])
nums[++i] = nums[j];
return i + 1;
}