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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python易忽视知识点小结
May 25 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
Python3实现二叉树的最大深度
Sep 30 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
javascript中对对层的控制
2006/12/29 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
python生成IP段的方法
2015/07/07 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python生成excel的实例代码
2017/11/08 Python
Python中extend和append的区别讲解
2019/01/24 Python
实例讲解Python3中abs()函数
2019/02/19 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
毕业生自我鉴定
2013/11/05 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
工程质量承诺书范文
2014/03/27 职场文书
党性心得体会
2014/09/03 职场文书
单位介绍信格式
2015/01/31 职场文书
mysql知识点整理
2021/04/05 MySQL
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
排查MySQL生产环境索引没有效果
2022/04/11 MySQL