日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 数组重复数字,[python3] 3_01 数组中重复的数字

發布時間:2024/4/13 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 数组重复数字,[python3] 3_01 数组中重复的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目如下

題目.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 数组中重复的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。