leetcode--删除排序数组中的重复项--python

news/2024/7/5 10:53:37

文章目录

  • 题目
    • 题目详情
    • 示例
    • 说明
  • 解题代码
    • 思路
    • 代码
    • 运行结果
    • 最佳方案

题目

题目详情

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例

给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。
给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。

说明

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}

解题代码

思路

  1. 首先题目要求的目的是删除重复的数并且返回数组长度
  2. 我首先想到的是遍历,因为给定的是一个有序的数组,但是每删除一个元素数组的大小会发生变化,如果从前面遍历的话就会存在问题,所以就需要从后面进行遍历
  3. 删除元素就用python的自带函数pop()
  4. 最后再返回数组长度,这道题就可以了

代码

class Solution:def removeDuplicates(self,nums):for i in range(len(nums)-1,0,-1):   #从后面遍历if nums[i] == nums[i-1]:nums.pop(i)return len(nums)

运行结果

在这里插入图片描述

最佳方案

我看了下最佳方案,就是用时最快的52ms的,这个答案的结果数组的长度是i+1,然后数组也是遍历到i+1,这样就说的通了。

class Solution:def removeDuplicates(self, nums: 'List[int]') -> 'int':if not nums:return 0       len_list = len(nums)        i = 0        for j in range(1,len(nums)):            if nums[i] != nums[j]:               nums[i+1] = nums[j]                i += 1return i+1

http://lihuaxi.xjx100.cn/news/242947.html

相关文章

Android中对Log日志文件的分析[转]

一&#xff0c;Bug出现了&#xff0c; 需要“干掉”它 bug一听挺吓人的&#xff0c;但是只要你懂了&#xff0c;android里的bug是很好解决的&#xff0c;因为android里提供了LOG机制&#xff0c;具体的底层代码&#xff0c;以后在来分析&#xff0c;只要你会看bug&#xff0c;a…

转:C#中Monitor对象与Lock关键字的区别分析

Monitor对象1.Monitor.Enter(object)方法是获取 锁&#xff0c;Monitor.Exit(object)方法是释放锁&#xff0c;这就是Monitor最常用的两个方法&#xff0c;当然在使用过程中为了避免获取锁之后因为异常&#xff0c;致锁 无法释放&#xff0c;所以需要在try{} catch(){}之后的fi…

接口测试要如何做数据准备

数据准备是接口测试过程中不可或缺的一步&#xff0c;也是花费时间很长的工作&#xff0c;因为程序的功能就是处理数据。那么在接口测试中&#xff0c;我们要怎样来准备数据呢?小编整理了以下一些关于数据准备的方法&#xff0c;希望对大家能有所帮助。 数据准备分为两种类型&…

舆情,文本挖掘

MLE&#xff0c;MAP&#xff0c;EM 和 point estimation 之间的关系是怎样的 和点估计相对应的是区间估计&#xff0c;这个一般入门的统计教材里都会讲。直观说&#xff0c;点估计一般就是要找概率密度曲线上值最大的那个点&#xff0c;区间估计则要寻找该曲线上满足某种条件的…

leetcode--删除排序链表中的重复元素--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 输入: 1->1->2 输出: 1->2输入: 1->1->2->3->3 输出: 1->2->3解题代码 …

学好web前端开发要注意哪些问题

web前端学起来是比较困难的&#xff0c;当然想要学好web前端技术&#xff0c;那么有一些注意事项一定是要看的&#xff0c;下面小编就为大家详细的介绍一下学好web前端开发要注意哪些问题? ​  学好web前端开发要注意哪些问题? 基础&#xff1a;无论做什么都一定要有扎实的…

thinkphp-条件判断-范围判断-range标签

说明range标签&#xff0c;替换判断用法,其中type属性的值可以用in/notin/between/notbetween&#xff0c; 其它属性的用法和IN或者BETWEEN一致示例{range name"2" value"1,2,3",type"in"}在 {/range}输出在转载于:https://blog.51cto.com/suyan…

leetcode--买股票的最佳时机II--python

文章目录题目题目详情注意示例代码思路解题代码运行结果最佳方案题目 题目详情 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。…