LeetCode题解之Contains Duplicate II

1、题目描述

2、题目分析

使用哈希表 和分情况讨论的方法

 

3、代码

bool containsNearbyDuplicate(vector<int>& nums, int k) {
        
        if( nums.size() == 0 ){
            return false;
        }
        
        if( k >= nums.size() ){
            map<int,int> m;
            for( auto n: nums){
                m[n]++;
                if(m[n] > 1){
                    return true;
                }
            }
            return false;
        }
        
        map<int,int>m;
        for( int i = 0; i < nums.size() - k +1; i++){
            if( i == 0){
                for(int j = i; j <= k; j++){
                    m[nums[j]]++;
                    if(m[nums[i+k]] > 1)
                        return true;
                }
            }else{
                if( m[nums[i-1]] <= 1){
                    m.erase(nums[i-1]);
                }else {
                    m[nums[i-1]]--;
                }
                if( i+k < nums.size() ){
                    m[nums[i+k]]++;
                    if(m[nums[i+k]] > 1)
                        return true;
                } 
            }
            
        }
        
        return false;
        
    }

 

posted @ 2018-08-28 11:16  山里的小勇子  阅读(94)  评论(0编辑  收藏  举报