题目如下

题目.png

思路1

将输入数组排序,从头到尾扫描排序后的数组。

代码如下

# 03_01_FindDuplication.py

class Solution(object):

def duplicate(self, number, length):

"""

:type number: list[int]

:type length: int

:type duplication: list

:rtype: list[int]

"""

# 若传入的数组为空或者参数不对

if number == [] or length < 0:

return False

#判断传入的数组number内每个数组元素值是否位于0~length - 1的范围内

for nn in number:

if nn <0 or nn > length - 1:

return False

# 若传入的参数没有问题,则将检查到的重复的参数放入数组duplication中(事先判断duplication中是否包含当前检查出的元素)

duplication = []

number.sort()

for i in range(0, length - 1):

if number[i] == number[i + 1]:

if number[i] not in duplication:

duplication.append(number[i])

return duplication

# 测试用例

## 符合题目要求的输入

number = [2, 1, 3, 1, 4]

length = 5

a = Solution()

aa = a.duplicate(number, length)

print("---test1---")

for aaa in aa:

print(aaa)

# 输入空的数组

number2 = []

length2 = 0

b = Solution()

bb = b.duplicate(number2, length2)

print("---test2---")

print(bb)

# 2个重复元素

number3 = [1, 2, 4, 6, 2, 4, 3]

length3 = 7

c = Solution()

cc = c.duplicate(number3, length3)

print("---test3---")

for ccc in cc:

print(ccc)

# 2个重复元素,其中元素2重复3次,元素4重复2次

number4 = [1, 2, 4, 5, 2, 2, 4]

length4 = 7

d = Solution()

dd = d.duplicate(number4, length4)

print("---test4---")

for ddd in dd:

print(ddd)

# 无重复元素

number5 = [1, 2, 3, 4, 5]

length5 = 5

e = Solution()

ee = e.duplicate(number5, length5)

print("---test5---")

print(ee)

运行结果

测试用例运行结果

可以看出,此程序返回所有重复数字。

思路2

利用哈希表来解决问题。

PS: 这里用到collections模块的Counter()函数。

代码如下

#03_01_FindDuplication_1.py

class Solution(object):

def duplicate(self, number, length):

"""

:type number: list[int]

:type length: int

:type duplication: list

:rtype: list[int]

"""

# 若传入的数组为空或者参数不对

import collections

if number == [] or length < 0:

return False

#判断传入的数组number内每个数组元素值是否位于0~length - 1的范围内

for nn in number:

if nn <0 or nn > length - 1:

return False

# 若传入的参数没有问题,则将检查到的重复的参数放入数组duplication中(事先判断duplication中是否包含当前检查出的元素)

duplication = []

key_dict = {}

key_dict = collections.Counter(number)

for key, count in key_dict.items():

if count != 1:

if key not in duplication:

duplication.append(key)

return duplication

# 测试用例

## 符合题目要求的输入

number = [2, 1, 3, 1, 4]

length = 5

a = Solution()

aa = a.duplicate(number, length)

print("---test1---")

for aaa in aa:

print(aaa)

# 输入空的数组

number2 = []

length2 = 0

b = Solution()

bb = b.duplicate(number2, length2)

print("---test2---")

print(bb)

# 2个重复元素

number3 = [1, 2, 4, 6, 2, 4, 3]

length3 = 7

c = Solution()

cc = c.duplicate(number3, length3)

print("---test3---")

for ccc in cc:

print(ccc)

# 2个重复元素,其中元素2重复3次,元素4重复2次

number4 = [1, 2, 4, 5, 2, 2, 4]

length4 = 7

d = Solution()

dd = d.duplicate(number4, length4)

print("---test4---")

for ddd in dd:

print(ddd)

# 无重复元素

number5 = [1, 2, 3, 4, 5]

length5 = 5

e = Solution()

ee = e.duplicate(number5, length5)

print("---test5---")

print(ee)

运行结果

测试用例运行结果

可以看出,此程序返回所有重复数字。

思路3

由于长度为n的数组里的所有数字都在0~n-1的范围内,若数组内的数字都没有重复,则数组排序后下标i对应的数字也为i。因此可以从数组的第一个元素开始扫描,若下标与数组元素值相等,则接着扫描下一个数字;若下标与数组元素值不相等,则判断当前数组元素值与下标为当前数组元素值对应的数字是否相等。若相等,则当前数组元素值重复,返回当前数组元素值,若不相等,则将当前数组元素换到对应下标处。重复上述过程,知道发现重复数字为止。

代码如下

#03_01_FindDuplication_2.py

class Solution(object):

def duplicate(self, number, length):

"""

:type number: list[int]

:type length: int

:type duplication: list

:rtype: list[int]

"""

# 若传入的数组为空或者参数不对

if number == [] or length < 0:

return False

#判断传入的数组number内每个数组元素值是否位于0~length - 1的范围内

for nn in number:

if nn <0 or nn > length - 1:

return False

# 若传入的参数没有问题,则将检查到的重复的参数放入数组duplication中(事先判断duplication中是否包含当前检查出的元素)

duplication = []

for i in range(0, length):

if number[i] == i:

pass

else:

if number[i] == number[number[i]]:

if number[i] not in duplication:

duplication.append(number[i])

else:

pass

else:

tmp = number[i]

number[i] = number[tmp]

number[tmp] = tmp

#for nn in number:

#print(nn)

#print("---")

return duplication

# 测试用例

## 符合题目要求的输入

number = [2, 1, 3, 1, 4]

length = 5

a = Solution()

aa = a.duplicate(number, length)

print("---test1---")

for aaa in aa:

print(aaa)

# 输入空的数组

number2 = []

length2 = 0

b = Solution()

bb = b.duplicate(number2, length2)

print("---test2---")

print(bb)

# 2个重复元素

number3 = [1, 2, 4, 6, 2, 4, 3]

length3 = 7

c = Solution()

cc = c.duplicate(number3, length3)

print("---test3---")

for ccc in cc:

print(ccc)

# 2个重复元素,其中元素2重复3次,元素4重复2次

number4 = [1, 2, 4, 5, 2, 2, 4]

length4 = 7

d = Solution()

dd = d.duplicate(number4, length4)

print("---test4---")

for ddd in dd:

print(ddd)

# 无重复元素

number5 = [1, 2, 3, 4, 5]

length5 = 5

e = Solution()

ee = e.duplicate(number5, length5)

print("---test5---")

print(ee)

运行结果

测试用例运行结果

可以看出,此程序无法检测数组内所有重复数字,但也满足题意。

新手刷题,若有任何疑问或者问题请留言,欢迎交流~~

python3 数组重复数字,[python3] 3_01 数组中重复的数字相关推荐

  1. c语言如何将字符串中的数字提取出来,从含有数字的文本字符串中提取出数字...

    图1 可以使用数组公式: =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$20),1)),0),COUNT(1*MID(A1,ROW($1:$20),1) ...

  2. python字符串拼接数字_解决Python中字符串和数字拼接报错的方法

    解决Python中字符串和数字拼接报错的方法 前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错. 如以下的代码: # co ...

  3. python去重复行_python去除文件中重复的行实例

    python去除文件中重复的行,我们可以设置一个一个空list,res_list,用来加入没有出现过的字符行! 如果出现在res_list,我们就认为该行句子已经重复了,可以再加入到记录重复句子的li ...

  4. php去除每行的重复文本,php删除文本文件中重复行的方法

    本文实例讲述了php删除文本文件中重复行的方法.分享给大家供大家参考.具体分析如下: 这个php函数用来删除文件中的重复行,还可以指定是否忽略大小写,和指定换行符 ?12345678910111213 ...

  5. 根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. [ {"data" : {"code" : "04 ...

  6. java list 重复数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  7. python数字转字符串_python中如何将数字转字符串

    python数字转字符串的实现方法:1.使用格式化字符串,语句如"tt=322 tem='%d' %tt":2.通过"str(5)"方法实现转换. 推荐:< ...

  8. html如何批量查找数字,wps文档中的全部数字怎么快速查找

    wps文档中的全部数字怎么快速查找 Wps软件是我们经常使用的文本编辑软件,如果我们编辑的文本字数较多,那么我们就很难一下找到文本中的数字,接下来小编就教大家怎么在wps中查找文档中的全部数字. 具体 ...

  9. python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向

    用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...

  10. access数据库剔除重复项_如何处理access中重复内容去除?

    2019-02-28 在excel表格中如何批量删除或不显示, 你的老板可真难伺候.把空格替换成无,把加号替换成"加"字,或"正",把斜杠替换成"每& ...

最新文章

  1. C++_pointer-like classes,function-like classes
  2. 安卓:安卓工程构建及第一个安卓程序运行
  3. r k-means 分类结果_R语言信用评分卡:数据分箱(binning)
  4. 基于Xml 的IOC 容器-载入配置路径
  5. 转载:GBDT算法梳理
  6. EasyUI层与拖拽系列控件
  7. Java连接各种数据库的实例
  8. Unique Email Addresses
  9. xcode与androidstudio 设置自定义主题
  10. 计数器代码php,php的计数器程序_php
  11. redis 集群scan
  12. 《Linux那些事儿之我是USB》我是U盘(14)冰冻三尺非一日之寒
  13. mysql复杂查询的书_mysql 复杂查询
  14. ubuntu卸载火狐浏览器(亲测有效)
  15. binlog实时同步
  16. 牛奶可乐经济学之Q3:为什么在高档餐厅,侍者的工资比助理厨师要高?
  17. echarts实现省份地图
  18. JS中或者(或 or ||)与并且(与 and )
  19. 《Hands-On Machine Learning with Scikit-Learn TensorFlow》习题答案 - 第一章
  20. node实现cmd弹窗交互——inquirer

热门文章

  1. Excel文件弹出另存为代码
  2. 收集下关系数据库处理亿万级别的数据
  3. 基于以太坊网络的智能合约开发、部署和测试(入门)
  4. 词法、语法与语义相关知识
  5. CSharpGL(36)通用的非托管数组排序方法
  6. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证
  7. JavaScript--DOM操作表格及样式(21)
  8. VIVOtech:使用近场通信(NFC)技术的免接触付款解决方案的市场领导者
  9. ssas 数据源mysql_BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备...
  10. matlab 集成学习方法,将simulink集成到matlab脚本中