【Leet Code】80. Remove Duplicates from Sorted Array II---Medium

原创 2015年11月18日 15:20:30

Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?

For example,
Given sorted array nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1122 and 3. It doesn't matter what you leave beyond the new length.

思路1:

相比于题目Remove Duplicates from Sorted Array,该题目允许两个重复值存在,所以设置一个标志位flag,当第二次插入该元素的时候令flag=true,下次如果flag为true,就不插入后面的元素了。


思路2:

除了借助位置指示i和j外,借助另一个位置指示k,来找到所有相同的元素,然后把相同元素第二次放入数组。

代码实现1:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() < 1) return 0;
        int j = 0, i = 1;
        bool flag = false;
        while(i < nums.size())
        {
            if(nums[i] == nums[j] && !flag)
            {
                nums[++j] = nums[i];
                flag = true;
            }
            else if(nums[i] != nums[j])
            {
                nums[++j] = nums[i];
                flag = false;
            }
            ++i;

        }
       return j+1; 
    }
};

代码实现2:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() < 1) return 0;
        int j = 0, i = 1;
        
        while(i < nums.size())
        {
            if(nums[i] == nums[j])
            {
                int k = i + 1;
                while(k < nums.size() && nums[k] == nums[i])
                    ++k;
                nums[++j] = nums[i];
                i = k;
            }
            else 
                nums[++j] = nums[i++];

        }
       return j+1; 
    }
};



【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】

【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月24日 07:01
  • 2310

Leetcode全数组问题

目录 1、编号2 Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respe...
  • wangxiaojun911
  • wangxiaojun911
  • 2014年02月06日 03:32
  • 6338

Remove Duplicates from Sorted Array II 从有序数组里移除重复出现元素,最多重复出现2次 @LeetCode

这是一类典型的题,思路是,一开始可以再开一个辅助数组,这样会更直观一些。如果新数组改变不会影响原数组,则可以合并起来,如本题。 package Level2; import java.util...
  • hellobinfeng
  • hellobinfeng
  • 2013年10月20日 12:55
  • 4286

[leet code] Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb...
  • u010500263
  • u010500263
  • 2014年02月20日 01:11
  • 566

leetcode题解-80. Remove Duplicates from Sorted Array II

题目:Follow up for "Remove Duplicates": What if duplicates are allowed at most twice?For example, Give...
  • liuchonge
  • liuchonge
  • 2017年04月21日 10:54
  • 648

【leetcode c++】80 Remove Duplicates from Sorted Array II

临近期末,转移战场,考完回家,家里怒报驾校,应接不暇。进正题 Remove Duplicates from Sorted Array II Follow up for "RemoveDupli...
  • hqq39
  • hqq39
  • 2015年07月17日 22:54
  • 317

【LeetCode】80. Remove Duplicates from Sorted Array II解法及注释

80. Remove Duplicates from Sorted Array II Total Accepted: 71844 Total Submissions: 220521 Diff...
  • Jin_Kwok
  • Jin_Kwok
  • 2016年04月11日 00:12
  • 220

61. Rotate List\80. Remove Duplicates from Sorted Array II\209. Minimum Size Subarray Sum

Rotate List 题目描述 代码实现 Remove Duplicates from Sorted Array II 题目描述 代码实现 Minimum Size Subarray Sum 题目描...
  • c602273091
  • c602273091
  • 2017年02月19日 16:17
  • 428

LeetCode - 80. Remove Duplicates from Sorted Array II

方法一: 这一种方法是第一个想到的,因为题目中要求删除的是出现两次及其以上的元素,所以在思考的时候想到了使用HashMap来记录数组中每个元素出现的次数,对于出现次数大于2的元素就删除。删除的方法是由...
  • shenzhu0127
  • shenzhu0127
  • 2016年04月12日 13:22
  • 189

LeetCode 80. Remove Duplicates from Sorted Array II

Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For example, Giv...
  • wys2011101169
  • wys2011101169
  • 2017年03月14日 11:23
  • 168
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leet Code】80. Remove Duplicates from Sorted Array II---Medium
举报原因:
原因补充:

(最多只允许输入30个字)