• 存在重复元素(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
  • 相关阅读:
    引入包时“”与<>的区别
    Scanners
    一个SQLite数据库的LIKE查询和IN集合查询的代码实例
    @synchronized线程同步互斥锁
    makeKeyAndVisible
    NSString 数字判断
    UILabel UITextField UITextView
    (转载)JAVA SE6.0 中使用SplashScreen
    转帖(http://hi.baidu.com/johnehuang/blog/item/e1e96782a4b04e97f703a6dc.html)
    ce
  • 原文地址:https://www.cnblogs.com/yejiang/p/10298751.html
Copyright © 2020-2023  润新知