Python实现删除排序数组中重复项的两种方法示例


Posted in Python onJanuary 31, 2019

本文实例讲述了Python实现删除排序数组中重复项的两种方法。分享给大家供大家参考,具体如下:

对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度

注意:不能为新数组申请额外的空间,只允许申请O(1)的额外空间修改输入数组

Example 1:

Given nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
It doesn't matter what you leave beyond

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.
It doesn't matter what values are set beyond the returned length.

说明:为什么返回列表长度而不用返回列表?因为列表传入函数是以引用的方式传递的,函数中对列表进行的修改会被保留。

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);
// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
  print(nums[i]);
}

1. 简单判断列表中元素是否相等,相等就删除多余元素

def removeDuplicates(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    if not nums:
      return 0
    if len(nums)==1:  #单独判断列表长度为1的情况,因为之后的for循环从下标1开始
      return 1
    temp_num = nums[0]
    count =0     #for循环中动态删除列表元素,列表缩短,为了防止下标溢出需要用count标记删除元素个数
    for index, num in enumerate(nums[1:]):
      if temp_num == num:   #元素相等就删除
        del nums[index-count]
        count += 1
      else:
        temp_num = num
    return len(nums)
def removeDuplicates(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    forth = 0
    back = 1
    while back <= len(nums)-1:
      if nums[forth] == nums[back]:
        nums.pop(back)
      else:
        forth += 1
        back += 1
    return len(nums)

2. 修改数组,保证数组的前几个数字互不相同,且这几个数字的长度同返回长度相等

def removeDuplicates(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    if not nums:
      return 0
    length = 0   #不存在重复数字的数组长度
    for index in range(1,len(nums)):   #遍历数组
      if nums[index] != nums[length]:
        length += 1
        nums[length] = nums[index]
    return length+1

算法题来自:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/

Python 相关文章推荐
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
Python 自动化表单提交实例代码
Jun 08 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
django基于restframework的CBV封装详解
Aug 08 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
如何基于Django实现上下文章跳转
Sep 16 Python
python删除文件、清空目录的实现方法
Sep 23 Python
Python测试框架:pytest学习笔记
Oct 20 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
python重试装饰器的简单实现方法
Jan 31 #Python
Python实现合并两个有序链表的方法示例
Jan 31 #Python
Django 日志配置按日期滚动的方法
Jan 31 #Python
Python类的继承用法示例
Jan 31 #Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 #Python
python3使用QQ邮箱发送邮件
May 20 #Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 #Python
You might like
西德产收音机
2021/03/01 无线电
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
smarty中js的调用方法示例
2014/10/27 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
event.srcElement+表格应用
2006/08/29 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
angularjs 的数据绑定实现原理
2018/07/02 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python中实现结构相似的函数调用方法
2015/03/10 Python
python文件的md5加密方法
2016/04/06 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
python中open函数的基本用法示例
2019/09/07 Python
Python 项目转化为so文件实例
2019/12/23 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
刑事上诉状范文
2015/05/22 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android