【Remove Duplicates from Sorted Array II】cpp
题目:
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].
代码:
class Solution {
public:
    int removeDuplicates(int A[], int n) {
        if (n <= ) return n;
        int index = ;
        for (int i= ; i<n; i++)
        {
            if ( A[index-]!=A[i] )
            {
                A[index++] = A[i];
            }
        }
        return index;
    }
};
Tips:
1. index始终指向下一个要插入元素的位置
2. 判断当前元素与index-2位置元素是否相等,如果不等就可以插入,保证没有连续三个相同的元素
3. 这里用到些数学归纳法的技巧:
a. 只要保证第1-第3个元素不是都相同的
b. 并且再后面每一步添加元素的时候判断都不是相同的
则可得结论一直到条件结束,调整后的数组中不会有三个连续重复的元素
========================================
第二次过这道题卡住了一下,复习了第一次写的程式,改出了AC的代码。
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
            if ( nums.size()< ) return nums.size();
            int prev = ;
            for ( int i=; i<nums.size(); ++i )
            {
                if ( nums[prev-]!=nums[i] )
                {
                    nums[prev++] = nums[i];
                }
            }
            return prev;
    }
};
tips:
这种数学归纳法之类的去重代码,可以总结出一定的规律
第一个指针 prev = 可以保持的重复数量 (这个指针指示当前可插入的位置)
第二个指针 i 从 可以保持重复数量下标开始 一直到数组长度最后
去重条件判断nums[prev-可以保持重复的数量]!=nums[i]
这样就可以获得满足题意的程式。
================================
这里还有一种特殊的case,如果出现重复的就不要了呢?写出了下面的程式
// special case
class SolutionS{
public:
static int removeDuplicates(vector<int>& nums)
{
if ( nums.size()< ) return nums.size();
int i=;
int prev = nums[]!=nums[] ? : ;
while (i<nums.size()-)
{
if (nums[i]!=nums[i-] && nums[i]!=nums[i+])
{
nums[prev++]=nums[i];
}
i++;
}
if ( nums[i]!=nums[i-] ) nums[prev++]=nums[i];
return prev;
}
};
这个程式是自己写的,自测了一些case。
思路很朴素:
1. 维护一个prev作为待插入的位置
2. 判断一个元素与前后元素是否相等
3. 处理第一个和末尾元素(第一个没有前驱,末尾没有后继,所以要特殊处理)
====================================================
还有一种情况,如果数组不是排序的,就用hashtable记录每个数字出现的次数。
【Remove Duplicates from Sorted Array II】cpp的更多相关文章
- leetcode 【 Remove Duplicates from Sorted Array  II 】python 实现
		
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...
 - 【Remove Duplicates from Sorted List II 】cpp
		
题目: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
 - 【Search in Rotated Sorted Array II 】cpp
		
题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would t ...
 - leetcode 【 Remove Duplicates from Sorted List II  】 python 实现
		
题目: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
 - 【leetcode】Remove Duplicates from Sorted Array II
		
Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...
 - 【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
		
Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...
 - 50. Remove Duplicates from Sorted Array  &&  Remove Duplicates from Sorted Array II  &&  Remove Element
		
Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that e ...
 - Remove Element,Remove Duplicates from Sorted Array,Remove Duplicates from Sorted Array II
		
以下三个问题的典型的两个指针处理数组的问题,一个指针用于遍历,一个指针用于指向当前处理到位置 一:Remove Element Given an array and a value, remove a ...
 - LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>
		
LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数 ...
 
随机推荐
- 获取hudson持续构建编译结果的一种方法
			
作者:朱金灿 来源:http://blog.csdn.net/clever101 很多时候使用hudson结合VisualStudio进行持续构建后需要获取持续构建的编译结果,通过编译结果来知道哪些项 ...
 - zabbix 监控项
			
监控项 概述 监控项是从主机收集的数据信息. 配置主机后,你需要添加一些监控项以开始获取实际数据. 一个监控项是一个独立的指标.快速添加多个监控项的一种方法是将一个预定义的模板附加到主机.然而,为了优 ...
 - Winform调整DEV控件高度
 - ASP.NET MVC 长连接(服务器推)完整实现
			
1.什么是"服务器推"(百科来一波)? 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔.L ...
 - POJ 3041 Asteroids (对偶性,二分图匹配)
			
题目:POJ 3041 Asteroids http://poj.org/problem?id=3041 分析: 把位置下标看出一条边,这显然是一个二分图最小顶点覆盖的问题,Hungary就好. 挑战 ...
 - vuejs挂载点,模板与实例的关系
			
<body> <div id='root'> <h1>{{msg}}</h1> </div> <script> new Vue( ...
 - UIButton 加载网络图片
			
以后就可以 用这个分类 UIButton轻松加载网络图片了, UIButton+WebCache.h #import <UIKit/UIKit.h> @interface UIButt ...
 - apache的安全增强配置(使用mod_chroot,mod_security)
			
apache的安全增强配置(使用mod_chroot,mod_security) 作者:windydays 2010/8/17 LAMP环境的一般入侵,大致经过sql注入,上传webshel ...
 - centos 7 虚拟机启用网卡
			
1.vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 2.编辑默认网卡配置文件,将ONBOOT由no改为yes,编辑完成后,按ESC回至命令模板,输入&qu ...
 - C++unsigned char和char区别
			
char和unsigned charchar与unsigned char都是一个字节8bit,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char( ...