您的位置:首页 > 大数据 > 人工智能

[Leetcode 219, Easy] Contains Duplicate II

2015-06-03 09:07 381 查看
Problem:

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 i andj is
at most k.

Analysis:

Solutions:

C++:

static bool CompareLess(pair<int, int> left, pair<int, int> right)
    {
        if((left.first < right.first)
            || (left.first == right.first && left.second < right.second))
            return true;
        
        return false;
    }

    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        if(nums.size() < 2 || k < 0)
            return false;
        
        vector<pair<int, int> > indexed_elements;
        for(int i = 0; i < nums.size(); ++i)
            indexed_elements.push_back(make_pair(nums[i], i));
            
        sort(indexed_elements.begin(), indexed_elements.end(), CompareLess);
        
        for(int i = 0; i < indexed_elements.size();) {
            if(i == indexed_elements.size() - 1)
                break;
                
            if(indexed_elements[i].first == indexed_elements[i + 1].first) {
                vector<int> indices(1, indexed_elements[i].second);
                int j = i + 1;
                cout << indexed_elements.size() << endl;
                for(; j < indexed_elements.size() && indexed_elements[j].first == indexed_elements[j - 1].first; ++j)
                    indices.push_back(indexed_elements[j].second);
                i = j;

                for(j = 0; j < indices.size() - 1; ++j) {
                    if(indices[j + 1] - indices[j] <= k)
                        return true;
                }
            } else
                ++i;
        }
        
        return false;
    }
Java:

Python:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: