Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums); // any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

26. Remove Duplicates from Sorted Array 的拓展,如果允许最多两次重复,返回去除之后的长度。

解法:同样使用双指针,增加一个变量记录出现的字符数量。

Java:

public class Solution {
public int removeDuplicates(int[] A) {
if (A == null || A.length == 0)
return 0; int pre = A[0];
boolean flag = false;
int count = 0; // index for updating
int o = 1; for (int i = 1; i < A.length; i++) {
int curr = A[i]; if (curr == pre) {
if (!flag) {
flag = true;
A[o++] = curr; continue;
} else {
count++;
}
} else {
pre = curr;
A[o++] = curr;
flag = false;
}
} return A.length - count;
}
}

Java:

public class Solution {
public int removeDuplicates(int[] A) {
if (A.length <= 2)
return A.length; int prev = 1; // point to previous
int curr = 2; // point to current while (curr < A.length) {
if (A[curr] == A[prev] && A[curr] == A[prev - 1]) {
curr++;
} else {
prev++;
A[prev] = A[curr];
curr++;
}
} return prev + 1;
}
}  

Python:

class Solution:
# @param a list of integers
# @return an integer
def removeDuplicates(self, A):
if not A:
return 0 last, i, same = 0, 1, False
while i < len(A):
if A[last] != A[i] or not same:
same = A[last] == A[i]
last += 1
A[last] = A[i]
i += 1 return last + 1  

C++:

class Solution {
public:
int removeDuplicates(int A[], int n) {
if (n <= 2) return n;
int pre = 0, cur = 1, count = 1;
while (cur < n) {
if (A[pre] == A[cur] && count == 0) ++cur;
else {
if (A[pre] == A[cur]) --count;
else count = 1;
A[++pre] = A[cur++];
}
}
return pre + 1;
}
};

  

类似题目:

[LeetCode] 26. Remove Duplicates from Sorted Array 有序数组中去除重复项

All LeetCode Questions List 题目汇总

[LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项 II的更多相关文章

  1. [LeetCode] 26. Remove Duplicates from Sorted Array ☆(从有序数组中删除重复项)

    [LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项 描述 Given a sorted array nums, remove the d ...

  2. [LeetCode]26. Remove Duplicates from Sorted Array删除排序数组中的重复项

    Given a sorted array nums, remove the duplicates in-place such that each element appear only once an ...

  3. 【LeetCode】Remove Duplicates from Sorted Array(删除排序数组中的重复项)

    这道题是LeetCode里的第26道题. 题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数 ...

  4. LeetCode#26 | Remove Duplicates from Sorted Array 删除有序数组中的重复元素

    一.题目 Description Given a sorted array, remove the duplicates in-place such that each element appear ...

  5. [LeetCode] 83. Remove Duplicates from Sorted List ☆(从有序链表中删除重复项)

    描述 Given a sorted linked list, delete all duplicates such that each element appear only once. Exampl ...

  6. 026 Remove Duplicates from Sorted Array 从排序数组中删除重复项

    给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度.不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点.示例:给定数组: nums ...

  7. [LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项之二

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  8. [LeetCode] Remove Duplicates from Sorted Array II 有序数组中去除重复项之二

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

  9. lintcode :Remove Duplicates from Sorted Array 删除排序数组中的重复数字

    题目: 删除排序数组中的重复数字 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成.  样例 ...

随机推荐

  1. springboot整合mybatis及封装curd操作-配置文件

    1 配置文件  application.properties  #server server.port=8090 server.address=127.0.0.1 server.session.tim ...

  2. java怎么比较两个实体类的属性值

    分享一下比较两个实体类的工具包 package cn.mollie.utils; import java.beans.Introspector; import java.beans.PropertyD ...

  3. EntityFramework6 学习笔记(一)

    1.什么是EF? EF是一种ORM(Object-relational mapping)框架,它能把我们在编程时使用对象映射到底层的数据库结构.比如,你可以在数据库中建立一个Order表,让它与程序中 ...

  4. Subarray Sum II

    Description Given an positive integer array A and an interval. Return the number of subarrays whose ...

  5. 注册服务到etcd中

    如上存放一些服务的key到etcd中,商品有两个,主要是为了负载均衡的key func NewService() *Service { config := clientv3.Config{ Endpo ...

  6. Eclipse Maven问题小记

    Eclipse Maven Web工程报错:java.lang.ClassNotFoundException: ContextLoaderListener 原因:打包项目时没有把相关Maven依赖包打 ...

  7. mysql 升序降序

    默认不指定,order by 按照升序排列. asc:升序 desc:降序

  8. Kali linux 2018 安装 Fluxion

    本人是在VMware 12下安装 Kali linux 2018.2版本 安装完成后 用命令行运行更新   apt-get update apt-get full-upgrade   更新所有组件. ...

  9. tomcat监控工具-probe

    概述 今天给大家介绍一款开袋即食的性能监控工具,居家性能测试必备! tomcat监控工具:probe tomcat probe是一个开源的监控tomcat运行状态工具,可以实时查看项目运行的情况,监控 ...

  10. Spring Boot 面试,一个问题就干趴下了!(下)

    前些天栈长在Java技术栈微信公众号分享一篇文章:Spring Boot 面试,一个问题就干趴下了!,看到大家的留言很精彩,特别是说"约定大于配置"的这两个玩家. 哈哈,上墙的朋友 ...