Remove Duplicates from Sorted Array II

问题描述

Follow up for ”Remove Duplicates”: What if duplicates are allowed at most twice? For example, Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2,3]

myCode

/*
 * 对一个已经有序的序列进行重复元素删除
 * 即保证序列相同元素最多出现两次
*/
class Solution1
{
public:
    int removeDuplicatesFromSortedArray(vector<int>& nums)
    {
        //当序列为空时
        if(nums.size() <= 2)
            return nums.size();

        //当序列非空时
        int index = 2;
        for(int i = 2;i<nums.size();i++)
        {
            if(nums[i] != nums[index-2])
            {

                nums[index] = nums[i];
                index++;
            }
        }
        return index;
    }
};

测试代码

#include<iostream>
#include<vector>
using namespace std;
/*
 * 对一个已经有序的序列进行重复元素删除
 * 即保证序列相同元素最多出现两次
*/
class Solution1
{
public:
    int removeDuplicatesFromSortedArray(vector<int>& nums)
    {
        //当序列为空时
        if(nums.size() <= 2)
            return nums.size();

        //当序列非空时
        int index = 2;
        for(int i = 2;i<nums.size();i++)
        {
            if(nums[i] != nums[index-2])
            {

                nums[index] = nums[i];
                index++;
            }
        }
        return index;
    }
};

//主函数
int main(void)
{

    vector<int> a;
    a.push_back(1);
    a.push_back(1);
    a.push_back(1);
    a.push_back(2);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    a.push_back(4);
    a.push_back(4);
    a.push_back(4);
    a.push_back(5);

    int index = a.size();
    //在删除重复元素之前
    cout<<"before:"<<endl;
    for(int i = 0;i<index;i++)
    {
        cout<<a[i]<<" ";
    }

    cout<<endl;

    //删除重复元素之后
    Solution1 s;
    int return_num = s.removeDuplicatesFromSortedArray(a);
    cout<<"after:"<<endl;
    for(int i = 0;i<return_num;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

Java码农必须掌握的循环删除List元素的正确方法!

首先看下下面的各种删除list元素的例子 public static void main(String[] args) { List<Stri...

369100
来自专栏吾爱乐享

#集合笔记二#list集合特有功能及案例迭代

18450
来自专栏杨熹的专栏

【LEETCODE】模拟面试-39. Combination Sum

和subset区别:规定了子集的sum==target 注意,这里传递的起始位置是i,而不是position+1,but why??? helper(res, ...

29350
来自专栏用户画像

HashSet和HashMap的区别 && HashTable和HashMap的区别

2.Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。

10130
来自专栏互扯程序

Java常用集合源码级深度解析

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:...

52260
来自专栏java一日一条

如何用Map对象创建Set对象

Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。

8710
来自专栏好好学java的技术栈

“365算法每日学计划”:04打卡-自己动手写一个单链表

15230
来自专栏Java帮帮-微信公众号-技术文章全总结

Java常犯错误top10

1. 数组转ArrayList 为了实现把一个数组转换成一个ArrayList,很多java程序员会使用如下的代码: List<String> list = A...

39070
来自专栏尾尾部落

[LeetCode]Degree of an Array 数组的度 [LeetCode]Degree of an Array 数组的度

链接:https://leetcode.com/problems/degree-of-an-array/description/ 难度:Easy 题目:69...

12420
来自专栏desperate633

LintCode 用递归打印数字题目分析代码

recursion(i) { if i > largest number: return results.add(i) recursion(i + 1)...

7610

扫码关注云+社区

领取腾讯云代金券