這是 LeetCode #217 中的一個問題。給定一個整數陣列nums,True如果任何值在陣列中至少出現兩次,則回傳,False如果每個元素都是不同的,則回傳。這是我的代碼。我不明白為什么當串列沒有重復時它是錯誤的?
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
b = False
i = 0
while i < len(nums) 1:
if nums[i] == nums[i 1]:
b = True
return b
else:
b = False
return b
uj5u.com熱心網友回復:
這種方法可以防止重復測驗并且不需要排序
def contains_duplicate(nums: list) -> bool:
for pos1, value in enumerate(nums):
for pos2 in range(pos1 1, len(nums)):
res = value nums[pos2]
if value == nums[pos2]:
return True
return False
print(contains_duplicate([1, 2, 3, 4, 3, 5]))
uj5u.com熱心網友回復:
i您必須在每次迭代中增加變數的值。此外,重復回圈的重復次數不應超過串列中的單元格數。
我添加i =1并更改while i < len(nums) 1:為while i < len(nums)-1:
將您的代碼更改為:
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
b = False
i = 0
while i < len(nums)-1:
if nums[i] == nums[i 1]:
b = True
return b
else:
b = False
i =1
return b
輸入:
[1,2,3,4,5,6,7]
輸出:
False
輸入:
[1,2,3,4,5,6,4]
輸出:
True
uj5u.com熱心網友回復:
這是一種可能有幫助的方法:
i在每個False結果之后增加計數器(在您的else
宣告中)
讓系統檢查直到len(nums)-1(而不是
len(nums) 1),以便我們避免index out of range error檢查中的nums[i 1]
def containsDuplicate(nums):
nums.sort()
b=False
i=0
while i<(len(nums)-1):
if nums[i]==nums[i 1]:
b=True
return b
else:
b=False
i = 1
return b
結果:
containsDuplicate([1, 2, 3])
False
containsDuplicate([1, 2, 2, 3])
True
替代方法:
set()如果您知道 Python (指向設定檔案的鏈接)不能包含任何重復項,這也是一種更簡單且可能更容易理解的替代方法。因此,將串列轉換nums為集合將自動洗掉重復項,然后將集合轉換回串列將允許您比較兩個串列。如果它們不一樣,那么您知道原始串列有重復:
def containsDuplicates(nums):
return nums != list(set(nums))
containsDuplicates([1, 2, 3])
False
containsDuplicates([1, 2, 2, 3])
True
注意:使用的方法set()要快得多:
%%timeit
containsDuplicates(list(range(10000)) [9999]) # set version
306 μs ± 9.84 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
containsDuplicate(list(range(10000)) [9999]). # sorted item-wise comparison
1.79 ms ± 13.4 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
uj5u.com熱心網友回復:
這個解決方案是錯誤的,因為:
- 它會在良好的場景輸入上導致超出范圍的例外
- 不檢查空輸入并且會導致超出范圍的例外
- 錯誤地迭代從不更新回圈計數器
最后,它有設計問題:
- 副作用(對輸入進行排序,無需復制)
- 無用的代碼(b,在回圈中將其設定為 True 或 False,即使 False 是默認值并且 True 使用提前回傳)
- 將解決方案包裝成一個無用的類
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419139.html
標籤:
