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

C++のサブ配列内の個別の要素の数のクエリ


この問題では、サイズnの配列arr[]が与えられます。そして、それぞれが2つの要素lとrで構成されるQクエリ。私たちのタスクは、C++のサブ配列内の多数の個別の要素のクエリを解決するプログラムを作成することです。

問題の説明 −ここでは、各クエリについて、arr[l]からarr[r]までのサブ配列内の個別の整数の総数を見つける必要があります。

問題を理解するために例を見てみましょう

入力

arr[] = {5, 6, 1, 6, 5, 2, 1}
Q = 2
{{1, 4}, {0, 6}}

出力

3
4

説明

クエリ1:l=1およびr=4の場合、subarray [1 ... 4] ={6、1、6、5}、個別の要素は=3です。

クエリ2− l=0およびr=6の場合、subarray [0 ... 6] ={5、6、1、6、5、2、1}、個別の要素は=4です。

ソリューションアプローチ

この問題を解決するために、セットデータ構造を使用します。その長さは、クエリで指定された範囲の配列の個別の要素の数を示します。クエリごとに、配列内の範囲のすべての要素をセットに挿入します。サブアレイの重複する要素はすべて破棄され、個別の要素のみが保存されるため、セットのサイズによって個別の要素の数がわかります。

ソリューションの動作を説明するプログラム

#include<bits/stdc++.h>
using namespace std;

int solveQuery(int arr[], int l, int r) {

   set<int> distElements;
   for (int i = (r); i >= (l); i--)
   distElements.insert(arr[i]);
   return distElements.size();
}

int main() {

   int arr[] = {5, 6, 1, 6, 5, 2, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   int Q = 2;
   int query[Q][2] = {{1, 4}, {0,6}};
   for(int i = 0; i < Q; i++)
   cout<<"For Query "<<(i+1)<<": The number of distinct elements in subarray is "<<solveQuery(arr,    query[i][0], query[i][1])<<"\n";
   return 0;
}

出力

For Query 1: The number of distinct elements in subarray is 3
For Query 2: The number of distinct elements in subarray is 4

  1. C++での算術数

    算術数は、すべての正の除数の平均が整数である数です。つまり、除数の数が除数の合計を除算できる場合、nは算術数です。 概念をよりよく理解するために例を見てみましょう。 Input : n = 6 Output : YES Explanation : Divisors are 1 , 2 , 3 , 6 Sum = 1+2+3+6 = 12 Number of divisors = 4 Sum of divisors / number of divisor = 12 / 4 = 3 アルゴリズム Step 1 : Calculate the sum of divisors and store i

  2. 配列要素の乗算のためのC++プログラム

    整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続