码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Contains Duplicate II

时间:2016-03-31 01:40:12      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/csudanli/p/5339650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!