※ Leetcode - Array - 219.Contains Duplicate II+217. Contains Duplicate(Map)

本文介绍了一种使用哈希表解决数组中查找重复元素的方法。包括两种情况:一种是仅判断是否存在重复元素;另一种是在此基础上进一步判断这些重复元素的索引差是否在给定范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Problem Description(219)

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.

判断数组是否满足存在两个数字相等而且他们的indice之差小于等于k

 

2. My solution

map,存储每个出现的数字的位置,一旦出现重复数字即判断和之前的数字距离之差是否满足题意。距离之差不满足即更新hash值为新的位置。


class Solution
{
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k)
    {
        int len=nums.size();
        map<int,int>hh;
        for(int i=0; i<len; i++)
        {
            if(hh[nums[i]]==0)
                hh[nums[i]]=i+1;
            else
            {
                int abs=hh[nums[i]]-(i+1);
                abs=abs>0?abs:(-abs);
                if(abs<=k)
                    return true;
                else
                    hh[nums[i]]=i+1;//因为要使得indice差最小,直接把他赋值为偏后面的的indice
            }
        }
        return false;
    }
};


3.No.217 Contains Duplicate(Map)

只需要判断是否出现重复数字。

class Solution
{
public:
    bool containsDuplicate(vector<int>& nums)
    {
        int len=nums.size();
        map<int,int>hh;
        for(int i=0; i<len; i++)
        {
            if(hh[nums[i]]==0)
                hh[nums[i]]=i+1;
            else
            {
                return true;
            }
        }
        return false;
    }
};



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值