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 数组中重复的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php制作随机地图,随机生成Roguel
- 下一篇: 用oracle怎么测试,oracle –