80. 删除有序数组中的重复项 II-通过计数器实现原地修改
数组 实现 修改 删除 通过 重复 II 有序
2023-09-14 09:06:52 时间
80. 删除有序数组中的重复项 II-通过计数器实现原地修改
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
示例 1:
输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。
示例 2:
输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。
这题也是很简单了,我们只需要稍微注意一下,设置一个计数器,然后呢,遍历一下数组,再设置一个更新数组的更新下标进行跟踪更新数组就可以了,解题代码如下:
int removeDuplicates(int* nums, int numsSize){
int count=1;
int size=1;
int pre=nums[0];
for(int i=1;i<numsSize;i++){
if(nums[i]==pre){
count++;
}
else{
pre=nums[i];
count=1;
}
if(count<=2){
nums[size++]=nums[i];
}
}
return size;
}
相关文章
- js 实现扁平数组转为树形结构数组及树形结构数组转为扁平数组
- String转成Json数组 JsonArray 保持有序
- 使用javascript实现数组截取
- awk 数组排序多种实现方法「建议收藏」
- 详解C语言中的数组指针与指针数组
- 【说站】Java数组的静态初始化实现
- 【说站】python数组分割的函数
- 【说站】JavaScript数组有哪些遍历方法
- 【说站】JavaScript数组重排序的方法
- JS中对象转数组案例解析
- c++实现strstr函数_C语言字符串数组
- 稀疏数组详解
- 稀疏数组(Java代码基本实现)
- 2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值。 如果可以做到,请返回任
- PHP 二维关联数组根据其中一个字段排序
- Java数组去掉重复的方法集详解编程语言
- Java数组操作的10大方法详解编程语言
- Go语言圣经-指针对象的方法-bit数组习题详解编程语言
- 对多个有序数组,实现归并操作详解编程语言
- Linux动态数组:实现运行时动态伸缩(linux动态数组)
- 的值MySQL遍历数组C语言实现(c mysql遍历数组中)
- Oracle中如何优雅地实现数组赋值(oracle中数组赋值)
- 深思PHP数组遍历的差异(array_diff的实现)
- JavaScript另类遍历数组实现代码
- javascript中删除指定数组中指定的元素的代码
- js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
- php学习笔记数组遍历实现代码
- php中经典方法实现判断多维数组是否为空
- chrome原生方法之数组
- PHP使用数组实现队列
- java重定义数组的实现方法(与VB的ReDim相像)
- 两路归并的数组与链表的实现方法
- js有序数组的连接问题
- JavaScript中实现PHP的打乱数组函数shuffle实例
- JavaScript中实现最高效的数组乱序方法
- 一个JavaScript递归实现反转数组字符串的实例