原题网址:http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/#
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
您在真实的面试中是否遇到过这个题?
Yes
样例
标签
思路:还是原来的方法,只不过多设置一个count用来记录当前元素个数。数组分为结果区和待处理区,i为结果区最后一个元素的下标,j为待判断区第一个元素下标。
若nums[i]与nums[j]相等并且count=1或者nums[i]不等于nums[j],将nums[j]添加到结果区,i++,这里分为两个情况:若nums[i]与nums[j]相等则count=2,若nums[i]与nums[j]不相等说明结果区添加的是新元素,count重置为1;
否则继续判断下一个元素;
最后resize数组只保留结果区,并返回i+1。
AC代码:
class Solution { public: /** * @param A: a list of integers * @return : return an integer */ int removeDuplicates(vector<int> &nums) { // write your code here int size=nums.size(); if (size==0) { return 0; } int i=0,j=1,count=1; while(j<size) { if ((nums[i]==nums[j]&&count==1)||nums[i]!=nums[j]) { if (nums[i]==nums[j]) { count=2; } else { count=1; } nums[i+1]=nums[j]; i++; } j++; } nums.resize(i+1); return i+1; } };