C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

特定の配列に、C++でそれぞれからk距離以内に重複する要素が含まれているかどうかを確認します


ここでは、ソートされていない配列に、互いにk距離以内に重複する要素があるかどうかを確認する方法を説明します。要素のリストが{1、2、3、1、4、5}であると仮定します。ここで、k =3の場合、2つの1の間の距離は3であるため、プログラムはtrueを返します。

ハッシュテーブルを使用してこれを解決します。手順は次のようになります-

  • 空のハッシュテーブルを1つ作成します
  • 各インデックスiについて、リスト内の要素e =arr[i]とします。
    • ハッシュテーブルにeが存在する場合は、trueを返します
    • それ以外の場合は、ハッシュテーブルにeを追加し、i> =Kの場合、ハッシュテーブルから(i-k)番目の要素が存在する場合は削除します。

#include<iostream>
#include<set>
using namespace std;
bool hasDuplicateWithDistK(int arr[], int n, int k) {
   set<int> element_set;
   for (int i = 0; i < n; i++) {
      if (element_set.find(arr[i]) != element_set.end())
         return true;
      element_set.insert(arr[i]);
      if (i >= k)
         element_set.erase(arr[i-k]);
   }
   return false;
}
int main () {
   int arr[] = {10, 5, 3, 4, 3, 5, 6};
   int n = sizeof(arr) / sizeof(arr[0]);
   if (hasDuplicateWithDistK(arr, n, 3))
      cout << "Duplicate element has found";
   else
      cout << "Duplicate element has not found";
}

出力

Duplicate element has found

  1. C++で指定された配列の要素の階乗のGCDを検索します

    N個の要素を持つ配列Aがあるとします。配列のすべての要素の階乗のGCDを見つける必要があります。要素が{3、4、8、6}であるとすると、階乗のGCDは6です。ここでトリックを確認します。 2つの数値のGCDは、両方の数値を除算する最大の数値であるため、2つの数値の階乗のGCDは、最小の数値自体の階乗の値です。だから3の公約数!と5! 3です! =6. 例 #include <iostream> using namespace std; long fact(int n){    if(n <= 1)       return

  2. 配列にPythonの特定の範囲のすべての要素が含まれているかどうかを確認します

    numsという配列があるとします。また、範囲[x、y]を定義する2つの数値xとyがあります。配列に指定された範囲のすべての要素が含まれているかどうかを確認する必要があります。 したがって、入力がnums =[5,8,9,6,3,2,4] x =2 y =6のような場合、すべての要素が[2,3,4,5]あるため、出力はtrueになります。 、6]。 これを解決するには、次の手順に従います- temp_range:=y-x 0からnumsのサイズの範囲のiの場合は、 =xおよび|nums[i] | <=y、次に z:=| nums [i] | -x 0の場合、 nums [z]