美文网首页
217. Contains Duplicate & 21

217. Contains Duplicate & 21

作者: Double_E | 来源:发表于2017-04-13 19:12 被阅读25次

    217. Contains Duplicate

    https://leetcode.com/problems/contains-duplicate/#/description

    Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

    超简单思路

    • 判断set之后的长度与原数组长度关系。。。
    class Solution(object):
        def containsDuplicate(self, nums):
            """
            :type nums: List[int]
            :rtype: bool
            """
            if len(nums) <= 1:
                return False
            return len(set(nums)) != len(nums)
    

    219. Contains Duplicate II

    https://leetcode.com/problems/contains-duplicate-ii/#/description

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.

    分析

    • 建立字典dict={value:index}
    • 遍历到i的value in dict,则判断index与i的关系
    • 需要注意[1, 0, 1, 1]时,需要对1的位置进行更新,从0->2,
      (因为这里位于0,2的距离较远,但是1,2的距离较近)
      所以判断条件中需要加上 i - d[nums[1]] <= k,否则才对d进行更新
    • key in d.keys() 等价于 key in d
    • 注意,若不对len(set(nums)) == len(nums)进行判断,则会有个超长数组让你超时。。。
    class Solution(object):
        def containsNearbyDuplicate(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: bool
            """
            if len(set(nums)) == len(nums):
                return False
            d = {}
            for i in range(len(nums)):
                if nums[i] in d.keys() and i - d[nums[i]] <= k:
                    return True
                else:
                    d[nums[i]] = i
            return False    
            
            
    

    相关文章

      网友评论

          本文标题:217. Contains Duplicate & 21

          本文链接:https://www.haomeiwen.com/subject/jrqiattx.html