首页 > 编程语言 >LeetCode Python - 80. 删除有序数组中的重复项 II

LeetCode Python - 80. 删除有序数组中的重复项 II

时间:2024-03-30 12:34:34浏览次数:18  
标签:nums Python 元素 II int 数组 长度 80 输入

目录


题目描述

给你一个有序数组 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 已按升序排列

解法

我们用一个变量 k 记录当前已经处理好的数组的长度,初始时 k=0,表示空数组。

然后我们从左到右遍历数组,对于遍历到的每个元素 x,如果 k<2 或者 x≠nums[k−2],我们就将 x 放到 nums[k] 的位置,然后 k 自增 1。否则,x 与 nums[k−2] 相同,我们直接跳过这个元素。继续遍历,直到遍历完整个数组。

这样,当遍历结束时,nums 中前 k 个元素就是我们要求的答案,且 k 就是答案的长度。

时间复杂度 O(n),空间复杂度 O(1)。其中 n 为数组的长度。

补充:

原问题要求最多相同的数字最多出现 2 次,我们可以扩展至相同的数字最多保留 k 个。

  • 由于相同的数字最多保留 k 个,那么原数组的前 k 个元素我们可以直接保留;
  • 对于后面的数字,能够保留的前提是:当前数字 x 与前面已保留的数字的倒数第 k 个元素比较,不同则保留,相同则跳过。
class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        k = 0
        for x in nums:
            if k < 2 or x != nums[k - 2]:
                nums[k] = x
                k += 1
        return k

运行结果

在这里插入图片描述

标签:nums,Python,元素,II,int,数组,长度,80,输入
From: https://blog.csdn.net/weixin_43228814/article/details/137170063

相关文章

  • 快递员的烦恼【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-快递员的烦恼快递公司每日早晨,给每位快递员推送需要送到客户手中的快递以及路线信息,快递员自己又查找了一些客户与客户之间的路线距离信息,请你依据这些信息,给快递员设计一条最短路径,告诉他最短路径的距离。注意:不限制快递包裹送到客户手中的顺序,但必须保证都送......
  • 园区参观路径【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-园区参观路径园区某部门举办了FamilyDay,邀请员工及其家属参加;将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;家属参观园区时,只能向右和向下园区前进;求从起始园区到终点园区会有多少条不同的参观路径;输入描述:第一行为园区长和宽;后面每一行表示......
  • python+django在线政务便民服务系统flask
     随着时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,在线政务服务中心管理当然不能排除在外。在线政务服务中心管理系统是在实际应用和软件工程的开发原理之上,运用python语言以及vue框架进行开发。首先要进行需求分析,分析出在线政......
  • Python三级题目解析-尊老王国
    尊老王国有一个默认的规则,排队必须遵守年长的在前,年幼是在后。一支正要出城的队伍,请帮助他们顺利出城。输入:15、78、96、45、36输出:[96,78,45,36,15][3,2,4,5,1]请在划线处补全代码,实现以上功能。s=inputx=s.split( '、')a=[]b=[]n= 0fori inrange( 0......
  • python每日练(二)
    1:九九乘法表foriinrange(1,10):forjinrange(1,i+1):print("%d*%d=%d"%(i,j,i*j),end='')print()通过两个for循环嵌套使用调用乘法的因子,最后的print()是为了让输出的结果美观,因为print()自带换行的功能。1*1=12*1=22*2=43*1=33*2=63*3=9......
  • python中numpy的介绍
    介绍numpyNumPy是一个开源的Python科学计算库,它提供了一个强大的多维数组对象(例如数组和矩阵)以及用于处理这些数组的各种函数。NumPy的核心是ndarray(N-dimensionalarray)对象,它是一个快速而灵活的大数据集容器。以下是NumPy的一些主要特点和功能:1.**多维数组对象**:NumPy提......
  • 【Python&GIS】Python实现批量导出面矢量要素(单个多面矢量->多个单面矢量)
    ​    可怜的我周六还在工作,已经很久没更新过博客了,今天正好有空就和大家分享一下。今天给大家带来的是使用Python将包含多个面要素/线要素的矢量批量导出单个要素的矢量,即一个要素一个矢量文件。之前写过多个矢量文件合并成一个矢量文件的博文,大家如果感兴趣可以看下:【......
  • yii2 模型
    yii2模型Yii2的模型(Model)是MVC(Model-View-Controller)设计模式中的一部分,它代表业务数据、规则和逻辑的对象。模型通常用于处理与数据相关的业务逻辑,如数据的验证、访问和修改等。模型示例代码<?phpnamespaceapp\models;useYii;useyii\db\ActiveRecord;......
  • 学python用什么软件好?python开发工具推荐?
    学python用什么软件好?对于python开发者来说,在互联网上有很多可用的开发工具,但对于初学者不知道哪个python开发工具比较好,找到一个合适的python开发工具是很难的,需要花费很多的时间精力。所以,今天php中文网就为初学者推荐十款好用的python开发工具。Python开发软件可根据其......
  • 初学者怎么学习Python?Python学习从什么开始?
    学习Python,可以先从Python爬虫开始哈首选,爬虫并不是网上传言的那样,动不动就面向铁窗编程等,正规的爬虫还是相当有市场的!!!而Python作为入门简易的语言,语法也相当简洁,用来入门爬虫再好不过了!学习Python爬虫需要一定的计划和步骤,以下是一个简单的学习计划:学习Python基础知......