存在重复元素(python3)

存在重复元素(描述一):

  给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true;如果数组中每个元素都不相同,则返回 false。

      示例 1:

        输入: [1,2,3,1]
        输出: true

      示例 2:

        输入: [1,2,3,4]
        输出: false

      示例 3:

        输入: [1,1,1,3,3,4,3,2,4,2]
        输出: true

解法一:
  思想:先对数组排序;再对数组进行遍历判断是否有重复
class Solution:
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        n = sorted(nums)
        L = len(n)
        i = 0
        while i < L - 1:
            if n[i] == n[i+1]:
                return True
            i += 1
        return False
            

解法二:
  1.set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
  2.这种做法的思想就是插入法判断数组有重复
class Solution:
    def containsDuplicate(self, nums):
        k = set()
        for i in nums:
            if i in k:
                return True
            else:
                k.add(i)
        return False

 存在重复元素(描述二): 

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 ij 的差的绝对值最大为 k

示例 1:

输入: nums = [1,2,3,1], k= 3
输出: true

示例 2:

输入: nums = [1,0,1,1], k=1
输出: true

示例 3:

输入: nums = [1,2,3,1,2,3], k=2
输出: false

方法一:
用两层循环暴力解决更本通不过,leetcode一共用了23组数据去测试,第22组数据大约有10万个数据,时间复杂度太高因此通不过。
class Solution:
    def containsNearbyDuplicate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        两层循环
        """
        i = 0
        j = i+1
        MIN = 10000
        while i < len(nums):
            while j < len(nums):
                if nums[i] == nums[j]:
                    MIN = abs(i-j)
                    if MIN <= k:
                        return True
                j += 1
            i = i + 1 
            j = i+1
        return False

方法二:

  1.利用python中的字典来减少一层循环

  2.当字典中没有此时遍历的元素,则加入字典

  3.当字典中有此时遍历的元素,则对其索引下标做差,算出绝对值,再与k进行比较

class Solution:
    def containsNearbyDuplicate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        1层循环+字典
        """
        Dict = {}
        for i in range(len(nums)):
            if nums[i] in Dict:
                if i-Dict[nums[i]] <= k:
                    return True
            Dict[nums[i]] = i
        return False

存在重复元素(描述三):

给定一个整数数组,判断数组中是否有两个不同的索引 ij,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 ij 之间的差的绝对值最大为 k

示例 1:

输入: nums = [1,2,3,1], k= 3, t = 0
输出: true

示例 2:

输入: nums = [1,0,1,1], k=1, t = 2
输出: true

示例 3:

输入: nums = [1,5,9,1,5,9], k = 2, t = 3
输出: false
原文地址:https://www.cnblogs.com/yejiang/p/10298751.html