关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
关小刷刷题09 – Leetcode 80. Remove Duplicates from Sorted Array II 方法1、2
题目
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 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.
思路
与26. Remove Duplicates from Sorted Array的差别是,这次数组的元素可以出现一次或者两次,超过两次的要删掉。26题中的思路1是没法用了,思路2和思路3还是可以继续用的。
方法1
方法1:时间复杂度O(n2)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
for(int i=2; i<nums.size(); i++)
{
if(nums[i]==nums[i-2])
{
nums.erase(nums.begin()+i);
i--;
}
}
return nums.size();
}
};
方法2
方法2:时间复杂度O(n): 这个改进版本为什么不能把26题中的i-1直接改成i-2呢?如果要是直接这样改的话,看一下这个例子: 1 1 1 2 2 3 4,当处理到nums[3]的时候,把2存到数组前面,数组变成 1 1 2 2 2 3 4,这个时候再处理nums[4]结果就错了。所以呢,我们还是得相邻元素作比较,要设置一个flag变量标记下,保证元素数目不要超过2. 当前后元素相等的时候,看一下flag如果是1说明前面只有一个该元素,此时将flag置为2,把该元素再存入数组前面,如果flag是2说明前面至少有两个该元素,就什么都不做。如果前后元素不相等的情况下,直接将flag置为1开始重新计数,并且把该元素存入数组前面。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.empty())
return 0;
int j=1,flag=1;
for(int i=1; i<nums.size(); i++)
{
if(nums[i]==nums[i-1])
{
if(flag==1)
{
flag++;
nums[j++]=nums[i];
}
}
else
{
flag=1;
nums[j++]=nums[i];
}
}
return j;
}
};
不拼搏,枉少年,加油!
以上就是关关关于这道题的总结经验,希望大家能够理解,有什么问题可以在我们的专知公众号平台上交流或者加我们的QQ专知-人工智能交流群 426491390,也可以加入专知——Leetcode刷题交流群(请先加微信小助手weixinhao: Rancho_Fang)。
- S3上传代码用例-golang
- jsp-------------之分页技术(一)
- ------------数据库的加锁操作(上)
- 对象存储基础概念
- 关于byte[]字节传输的大端和小端小议
- hdu 2818 Building Block
- hdu 3074 Zjnu Stadium (带权并查集)
- 线程练习题---简易多人聊天室
- Servlet的尾(yi)巴---filter ( 过滤器 )的小应用
- ijg库的使用的几点注意
- C++获取鼠标位置及全局检测鼠标行为
- C/C++ http协议加载sessionID
- 两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享
- 服务器端Go程序对长短链接的处理及运行参数的保存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 各位相加,直到得到一个一位的整数
- BFE.dev前端刷题64 - Promise reject的时候自动retry
- 顺序消息管道《Message Pipe》v1.0.1版本发布
- Qt音视频开发23-通用视频控件
- 破解Mariadb5.5密码
- redis学习(七)
- 自己实现一个SAP WebClient UI Repository Information System
- ABAP,Java和JavaScript类的构造函数使用的一些陷阱
- Spring Security如何优雅的增加OAuth2协议授权模式
- 如何将自定义XML视图注入SAP Fiori Elements应用
- SAP UI5控件ID的生成逻辑原理解析
- 如何自定义SAP Spartacus店铺的界面颜色风格
- 如何自定义SAP Spartacus店铺的购物车图表css风格
- 数据库PostrageSQL-从源代码安装
- Django的中间件