当前位置:网站首页>【leetcode】80. 删除有序数组中的重复项 II(中等)(双指针、原地修改)
【leetcode】80. 删除有序数组中的重复项 II(中等)(双指针、原地修改)
2022-07-29 22:46:00 【friedrichor】
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 。 不需要考虑数组中超出新长度后面的元素。
提示:
- 1 <= nums.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums 已按升序排列
思路&代码
这题的重点仍然在于原地修改
方法一:
可以使用一个字典来记录每个数出现的次数,用一个指针p来记录当前需要更改的位置,指针i用来遍历。不过这种方法使用了字典,因此额外的空间复杂度较高。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
p = 0
dic = dict()
for i in range(len(nums)):
n_now = nums[i]
if n_now not in dic.keys():
dic[n_now] = 1
else:
dic[n_now] += 1
if dic[n_now] <= 2:
nums[p] = n_now
p += 1
nums = nums[:p]
return len(nums)
方法二:
仍然是 p 和 i 两个指针,不过这里判断的条件改为比较 n u m s [ i ] nums[i] nums[i] 和 n u m s [ p − 2 ] nums[p-2] nums[p−2] 是否相同,相同则说明数量大于3个了,应该从 nums 中删除了这个多余的部分。这时额外的空间为常数,即 O ( 1 ) O(1) O(1),满足条件。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
p = 2
for i in range(2, len(nums)):
if nums[i] != nums[p-2]:
nums[p] = nums[i]
p += 1
nums = nums[:p]
return len(nums)
边栏推荐
猜你喜欢
随机推荐
超分之RVRT
How to realize object selection in canvas (5)
趣味隐写术与密码术(现代密码学教程)
C语言快速入门(为了看源码)
JZ24 反转链表
【企业架构】新的企业架构条款和证书出现
lambda表达式
The sequence table of the linear table (the dry goods are full of sharing ~ contains all the function codes of the sequence table~
七、HikariConfig初始化分析
流水线上的农民:我在工厂种蔬菜
【板栗糖GIS】wps—如何查看表格中的超链接
文献综述的写作技巧,掌握这些技巧,效率大大提高!
高等数学(第七版)同济大学 习题3-7 个人解答
【面试:并发篇29:多线程:volatile】原理
NC4 判断链表中是否有环
[C] list explanation (headless ChanXiangFei cycle)
chrome集成沙拉查词
动态规划专题
八、HikariCP源码分析之ConcurrentBag一
cached_network_image crashes with multiple images









