數組系列
原題:給定一個整數數組,判斷是否存在重複元素。
如果任何值在數組中出現至少兩次,函數返回 true。如果數組中每個元素都不相同,則返回 false。
方法一:
對於數組類的問題,其中像這種針對元素的問題,我們首先第一步想的是排序,因爲排完序之後的數組,其元素有一定的規律性,對我們解決問題會有一定的幫助性,所以排序是一個很好的預處理方法。這只是一個我的一個思路。
第一步:我們對數組進行排序,這裏我直接使用了sort()內置函數,實際上,我們也可以使用希爾排序,冒泡排序,選擇排序,插入排序,快速排序,但是這些方法在數據量很大時在LeetCode裏運行是會超時的。
第二步:排完序的數組,如果有重複的元素,元素必然是相鄰的。
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
nums.sort() # sort()是python內置函數,可以對數組進行排序
for i in range(len(nums)-1):
if nums[i] == nums[i+1]:
return True
return False
冒泡排序:
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if nums[j] >nums[j+1]:
nums[j],nums[j+1] = nums[j+1],nums[j]
運行時間超過時間限制。
九大排序,以後有機會統一學習一下。
方法二(超時):
直接暴力法, 運用兩次遍歷,尋找相同元素。很明顯會超時。
做到這裏,我們發現在LeetCode裏面關於數組方面一旦使用兩次遍歷是肯定超時的。
有人會問,爲什麼python自帶的sort函數不會超時?下面這個鏈接或許可以給你答案。
https://blog.csdn.net/sinat_35678407/article/details/82974174