101 删除排序数组中的重复数字 II

原题网址:http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/#

跟进“删除重复数字”:

如果可以允许出现两次重复将如何处理?

 

样例
 
标签 
 
思路:还是原来的方法,只不过多设置一个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;
    }
};

 

 
posted @ 2018-04-22 16:35  eeeeeeee鹅  阅读(126)  评论(0编辑  收藏  举报