C++のソートされていない配列でk個の最も近い数を検索します
要素が少ない配列Aがあるとします。配列はソートされていません。他に2つの値Xとkがあります。私たちのタスクは、配列AからXの最も近い要素のk個を見つけることです。要素Xが配列に存在する場合、それは出力に表示されません。 A =[48、50、55、30、39、35、42、45、12、16、53、22、56]およびX =35、k =4の場合、出力は30、39、42、45になります。 。
これを解決するために、ヒープデータ構造を使用します。手順は次のようになります-
-
最初のk個の要素との差の最大ヒープを1つ作成します
-
k + 1番目の要素から始まるすべての要素について、これらの手順を繰り返します
-
xから現在の要素の違いを見つける
-
差がヒープのルートよりも大きい場合は、現在の要素を無視します
-
それ以外の場合は、ルートを削除した後、現在の要素をヒープに挿入します。
-
-
最後に、ヒープにはk個の最も近い要素が含まれます。
例
#include <iostream> #include<queue> using namespace std; void findKClosestNumbers(int arr[], int n, int x, int k) { priority_queue<pair<int, int> > priorityQ; for (int i = 0; i < k; i++) priorityQ.push({ abs(arr[i] - x), i }); for (int i = k; i < n; i++) { int diff = abs(arr[i] - x); if (diff > priorityQ.top().first) continue; priorityQ.pop(); priorityQ.push({ diff, i }); } while (priorityQ.empty() == false) { cout << arr[priorityQ.top().second] << " "; priorityQ.pop(); } } int main() { int arr[] = {48, 50, 55, 30, 39, 35, 42, 45, 12, 16, 53, 22, 56}; int x = 35, k = 5; int n = sizeof(arr) / sizeof(arr[0]); findKClosestNumbers(arr, n, x, k); }
出力
45 42 30 39 35
-
C++の配列内のすべての素数の積
いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7
-
Sの中央値に最も近いk個の数を見つけるC++プログラム。ここで、Sはn個の数のセットです。
これは、Sの中央値に最も近いk個の数値を見つけるためのC ++プログラムです。ここで、Sはn個の数値のセットです。 アルゴリズム Begin function partition() for partitioning the array on the basis of values at high as pivot value: Arguments: a[]=an array. l=low H=high Bo