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

C ++でO(n)時間未満で、制限された範囲の配列内の各要素の頻度を見つけます


整数の配列があるとします。配列はAで、サイズはnです。私たちのタスクは、O(n)時間未満の配列内のすべての要素の頻度を見つけることです。要素のサイズは、Mなどの1つ未満の値である必要があります。ここでは、二分探索アプローチを使用します。ここでは、終了要素が異なる場合、配列を2つの部分に再帰的に分割します。両方の終了要素が同じである場合、配列内のすべての要素が、配列が既にソートされているのと同じであることを意味します。

#include<iostream>
#include<vector>
using namespace std;
void calculateFreq(int arr[], int left, int right, vector<int>& frequency) {
   if (arr[left] == arr[right])
      frequency[arr[left]] += right - left + 1;
   else {
      int mid = (left + right) / 2;
      calculateFreq(arr, left, mid, frequency);
      calculateFreq(arr, mid + 1, right, frequency);
   }
}
void getAllFrequency(int arr[], int n) {
   vector<int> frequency(arr[n - 1] + 1, 0);
   calculateFreq(arr, 0, n - 1, frequency);
   for (int i = 0; i <= arr[n - 1]; i++)
      if (frequency[i] != 0)
         cout << "Frequency of element " << i << " is " << frequency[i] << endl;
}
int main() {
   int arr[] = { 10, 10, 10, 20, 30, 30, 50, 50, 80, 80, 80, 90, 90, 99 };
   int n = sizeof(arr) / sizeof(arr[0]);
   getAllFrequency(arr, n);
}

出力

Frequency of element 10 is 3
Frequency of element 20 is 1
Frequency of element 30 is 2
Frequency of element 50 is 2
Frequency of element 80 is 3
Frequency of element 90 is 2
Frequency of element 99 is 1

  1. 各配列要素のモジュラスが同じになるように「k」を見つけるC++プログラム

    この記事では、特定の配列の各要素での係数が同じになるように、整数「k」を見つけるプログラムについて説明します。 たとえば、配列が与えられたとしましょう。 arr = {12, 22, 32} 次に、k =1、2、5、10の出力値があります。 y)の2つの値の場合を考えてみましょう。次に、(y + Difference)%k =y%kになります。これを解決すると、 difference%k = 0 したがって、配列内の最大要素と最小要素の差に対するすべての除数を見つけてから、配列内のすべての要素の余りが同じかどうかを各除数で確認します。 例 #include<bits/stdc++

  2. 各要素がN以下になるような一意のペアを見つけるC++プログラム

    この記事では、N以下の要素を持ち、いくつかの特定の条件に従う一意の数のペアを見つけるプログラムについて説明します- 2つの数値の差の二乗は、これら2つの数値のLCMと等しくなければなりません。 これらの2つの数値のHCFは、任意の2つの連続する数値の積として表すことができます。 この問題を解決するための最良のアプローチは、2つの連続した数(1から開始)を取り、それらの数の積の倍数を見つけることです。次に、倍数の中で、1つのペアの数値を指定するには、ペアの数値が最初に指定された条件を満たすかどうかを確認する必要があります。 たとえば、2と3の場合を考えます。それらの積は6にな