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

Contains Duplicate II

时间:2015-06-25 09:00:59      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:

Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between iand j is at most k.

解题思路:

给定一个整型数组和一个整数k。如果这个数组中位置相差不超过k的两个数相同,则返回true,否则返回false.也就是找数组中k长子序列中是否有重复元素。
解题方法:
数组中k长子序列有很多,就像一个滑动的窗口,从0~k-1直到n-k+1~n.如果用普通遍历方法,当数组过长时会超时。我们用STL 中的set。只有唯一key值。
代码如下:
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        if(k<0) return false;
        if(k>=nums.size()) k=nums.size()-1;
        unordered_set<int> s;
        for(int i=0;i<nums.size();i++)
        {
            if(i>k) s.erase(nums[i-k-1]);//限制窗口长度为k。
            if(s.find(nums[i])!=s.end()) return true;//找集合s中值为nums[i]的元素的位置,如果没有遍历到最后就找到了,则说明其中有重                                                      //复元素
            s.insert(nums[i]);
        }
        return false;
        
    }
};



Contains Duplicate II

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/46628471

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