[Leetcode /ハッシュテーブル]重複要素(スライディングウィンドウ+ハッシュ・テーブル)

問題の説明:

整数配列と整数所与  Kが決定され、アレイ内の2つの異なるインデックスがある場合、 I  及び Jは、例えばその  NUMS [I] = NUMS [J] および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に

基本的な考え方:

ウィンドウ+ハッシュセットをスライドさせるアイデアを使用します。

スライディングウィンドウを開始する場合には完全に、特別な決意を確立しません。

完了の場合、要素を削除して挿入していき、確立されています。重複があるかどうかを確認するには。

ACコード:

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
      int i = 0, j = 0;
      set<int> s;
      while (j != nums.size()) {
        if (s.size() != k + 1) {    // 处理刚开始的情况
          if (s.count(nums[j])) {   // 刚开始就有重复元素的情况
            return true;
          } else {
            s.insert(nums[j++]);
          }
        } else {    // 滑动窗口已经建立的情况下
          s.erase(nums[i++]);
          if (s.count(nums[j])) {
            return true;
          } else {
            s.insert(nums[j++]);
          }
        }
      }
      return false;
    }
};

 

公開された137元の記事 ウォン称賛19 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43338695/article/details/102741648