leetcodeは重複要素II c++が存在する


重複要素IIの存在
1つの整数配列と1つの整数kが与えられ、nums[i]=nums[j]となり、iとjの差の絶対値が最大kとなるように、配列に2つの異なるインデックスiとjが存在するか否かが判断される.//kより小さくてもいいです
例1:
  : nums = [1,2,3,1], k = 3
  : true

例2:
  : nums = [1,0,1,1], k = 1
  : true

例3:
  : nums = [1,2,3,1,2,3], k = 2
  : false

解法1:
2 D配列を作成し、値とインデックスを格納し、値をソートし、最後に同じ値を検索し、インデックスの差がk以下であるかどうかを判断します.
class Solution {
public:
    static bool cmp(const vector &a,const vector &b)
    {
        return a[0]& nums, int k) {
        if(nums.size()<2) return false;
        vector> lis(nums.size(),vector(2));
        for(int i=0;i

解法2:
インデックスのハッシュテーブルに値をmapで格納し、mapに同じ値があるかどうかを一つ一つ検索し、ある場合はインデックス差がk以下であるかどうかを判断し、そうでない場合はmapのインデックス値を変更します.
class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
        if(nums.size()<2) return false;
        map a;
        for(int i=0;i::value_type(nums[i],i));
        }
        return false;
    }
};