数组系列
原题:给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 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