LeetCode Contains Duplicate II
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Contains Duplicate II相关的知识,希望对你有一定的参考价值。
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 jis at most k.
题目的大意:给你一个int型的数组和k,看看在数组中,是否有两个不同的索引i和j使得nums[i]=nums[j],i和j的差值,最多为k
首先想到的办法是一个一个数字的比,两个for循环即可得到结果。但是这种方法耗时过长,提交后没过。这时需要考虑建一个multimap
将数组的值和索引存到里面去,这样就快的多了。理所当然,提交也通过了
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { if (nums.size()<2 || k<1)return false; else { multimap<int, int> mulm; for (int i = 0;i < nums.size();++i) mulm.insert(make_pair(nums[i], i)); for (int i = 0;i < nums.size();++i) { auto cnt = mulm.count(nums[i]); auto iter = mulm.find(nums[i]); while (--cnt) { int pre = iter->second; int real = (++iter)->second-pre; if (real <= k)return true; } } } return false; } };
以上是关于LeetCode Contains Duplicate II的主要内容,如果未能解决你的问题,请参考以下文章
leetcode笔记:Contains Duplicate III
LeetCode219. Contains Duplicate II