219. Contains Duplicate II

    xiaoxiao2024-12-26  12

    这道题目类似上道题目217,考查的主要是hash表的用法。 描述: 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 difference between i and j is at most k.

    意为:给出一个int型的数组,找出是否存在两个重复的元素,并且它们的下标之间的距离是小于k的,是它们之间相隔了的元素个数必须小于k,如果给的k = 3,那么至多只能存在2个。

    思路:

    1.首先既然是判断数组nums的值是否相等,那么我们可以将nums的值作为key,key是唯一的。 2.还要对比它们的位置,那么我们就将其下标作为val存放在hash_map中。 每次我们添加元素进hash表中,判断一下是否存在了这个元素,存在的话再拿出这个元素的val(也就是下标)和当前的nums元素下标比较,是否满足小于k的条件。

    class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_map<int,int> hash; //<val,index> for(int i = 0;i < nums.size();i++){ if(hash.count(nums[i])){ if((i - hash[nums[i]] - 1) < k){ return true; } } //将值,和下标存放到hash表中 hash[nums[i]] = i; } return false; } };

    python:

    class Solution(object): def containsNearbyDuplicate(self, nums, k): hash = {} //使用range方法来模拟c++中的for(i=0;i<size;i++)循环 for i in range(len(nums)): if nums[i] in hash: if (i-hash[nums[i]]-1) < k: return True hash[nums[i]] = i return False
    转载请注明原文地址: https://ju.6miu.com/read-1295021.html
    最新回复(0)