leetcode219-存在重复元素II

原题

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

解法

思想

哈希表,将元素和最后出现的下标对应起来,后面遍历到相同元素时看下标之差是否小于等于k

代码

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<nums.length;i++){
            if(map.containsKey(nums[i])){
                if(i-map.get(nums[i])<=k) return true;
            }
            map.put(nums[i],i);
        }
        return false;
    }
}
func containsNearbyDuplicate(nums []int, k int) bool {
    lastIndex := map[int]int{}
    for index, num := range nums{
        if li, ok := lastIndex[num]; ok{
            if index - li <= k{
                return true
            }
        }
        lastIndex[num] = index
    }
    return false
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode219-%e5%ad%98%e5%9c%a8%e9%87%8d%e5%a4%8d%e5%85%83%e7%b4%a0ii/

(0)
彭晨涛彭晨涛管理者
上一篇 2019年12月23日
下一篇 2019年12月25日

相关推荐

发表回复

登录后才能评论