LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++
目录
- 题目 删除有序数组中的重复项
- 参考答案
- 题目 删除有序数组中的重复项||
- 参考答案
题目 删除有序数组中的重复项
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}
示例 1:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
提示:
- 0 <= nums.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums 已按升序排列
参考答案
class Solution {public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if (n == 0) {return 0;}int fast = 1, slow = 1;while (fast < n) {if (nums[fast] != nums[fast - 1]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}
};
题目 删除有序数组中的重复项||
给你一个有序数组 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 。 不需要考虑数组中超出新长度后面的元素。
提示:
- 1 <= nums.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums 已按升序排列
参考答案
class Solution {public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if (n <= 2) {return n;}int slow = 2, fast = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}
};
LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++相关推荐
- LeetCode算法系列_0862_和至少为K的最短子数组
0862_和至少为 K 的最短子数组 题目描述 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例1: 输入:A = [1], ...
- leetcode算法题--两个字符串的最小ASCII删除和★
原题链接:https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/ 相关题目:最长公共子序列 1.递归(超时 ...
- c语言中删除有序数组中重复元素,去除有序列表中的重复元素
2014-10-27 09:13:00更新 你仔细研究一下我写的 testAsignPoint 和 testAsignPointAgain 函数就会明白为什么你的二级指针无效了. 还是那句话,你要记住 ...
- leetcode算法题--删除排序链表中的重复元素 II
原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 1.map ListNode* deleteD ...
- 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- Leecode刷题【1数组专题4】80. 删除排序数组中的重复项II (以及通用解法)
Leecode刷题 [1数组专题4]80. 删除排序数组中的重复项II (以及通用解法) 题目: 思路 双指针法: (错误代码) 正解: 通用解法: 题目: 给你一个有序数组 nums ,请你 原地 ...
- Leetcode算法题:两个有序数组求中位数
Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...
- [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...
- c++删除数组中重复元素_PG13中的功能—B树索引中的重复数据删除
PostgreSQL 13 Beta 1版本于2020年5月21日发布,PostgreSQL 13 Beta 2版本于2020年6月25日发布.虽然Beta 版本中依旧包含一些错误,但是它总是几乎涵盖 ...
最新文章
- Linux下屏蔽Ctrl+Alt+Delete
- 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记三
- log4j每天,每小时产生一日志文件
- Csharp: Winform 顏色選擇器 Color convert RGB and RGB convert Color
- 【Hadoop 分布式部署 五:分布式部署之分发、基本测试及监控】
- cannot resolve symbol xxxx问题
- endnote style_教你在论文写作中玩转 Endnote
- iOS autoreleasePool 深入理解
- RedHat红帽RHEL7.2镜像下载以及安装教程(内含下载链接)
- gms2游戏移植linux,GMS卡刷包制作
- PID控制器开发笔记之十二:模糊PID控制器的实现
- 如何判断工作簿中是否存在某个工作表
- 阿里云存储OSS《快速使用》
- A Beautiful Song : Burning
- 长租公寓如何管理水电及租金?
- 微信HTML5页面设计建议
- mysql 字段数量不确定_不定字段数目的数据库表设计和数据结构 | 学步园
- 工作快两年了!斗胆谈谈校招社招技术面试那些事
- c++小游戏小镇1.0地下城
- threejs 绘制球体_实战:用 threejs 创建一个地球