问题->方案->实现: 判断是否存在重复元素

本文介绍了一个C++程序,用于检查给定数组中是否存在两个不同索引的元素相等且索引差不超过k的方法。通过使用unordered_map实现快速查找,提高了算法效率。

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

判断是否存在重复元素

给定一个整数数组和一个整数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

程序如下:

#include <bits/stdc++.h>

using namespace std;


class Solution

{

public:

  bool containsNearbyDuplicate(vector<int> &nums, int k)

  {

    int n = nums.size(), idx = 0;

    unordered_map<int, int> nmap;

    for(int i=0; i<n; ++i)

    {

      auto iter = nmap.find(nums[i]);

      if(iter != nmap.end())

      {

        if(i - iter->second <= k)

          return true;

        else

          iter->second = i;

      }

      else

         nmap[nums[i]]=i;

    }

    return false;

  }



};





vector<int> nums = {1,2,3,1,2,3};



int main()

{

  Solution sol;

  bool result = sol.containsNearbyDuplicate(nums, 2);

  cout<< "result is " << result << endl;

  return 0;

}



$ g++ -o test test.cpp

$ ./test

result is 0

这里主要使用unordered_map,实现了元素的快速查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值