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

C++で元の順序で配列のk個の最大要素を検索します


この問題では、n個の要素の配列arr[]が与えられます。私たちのタスクは、元の順序で配列のk個の最大要素を見つけることです。

配列の最大k個の要素を見つけて、最初にインデックスが付けられたとおりに出力する必要があります。

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

入力: arr [] ={5、1、3、6、2}、k =2

出力: 5、6

説明:

配列の最大の2つの要素は6と5です。ただし、元の配列では5が6の前に来るため、そのように印刷しました。

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

問題を解決するには、k個の要素を元の順序で印刷します。

このために、arr[]の要素を降順で格納するdecArrayを作成します。次に、元の配列をトラバースし、decArray[]を使用してk個の最大要素を順番に出力します。

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

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

bool seachVal(int decArr[], int k, int ele){

   for(int i = 0; i < k; i++){
      if( decArr[i] == ele)
         return true;
   }
   return false;
}

void printKMaxEle(int arr[], int k, int n) {
   
   int decArr[n];
   for(int i = 0; i < n ; i++){
      decArr[i] = arr[i];
   }
   sort(decArr, decArr + n, greater<int>());

   for (int i = 0; i < n; ++i)
      if ( seachVal(decArr, k, arr[i]) )
         cout<<arr[i]<<" ";
}

int main() {
   
   int arr[] = { 15, 1, 3, 6, 2, 34, 8, 9 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   cout<<k<<" maximum elements of the array in their original order are \n";
   printKMaxEle(arr, k, n);
   return 0;
}

出力

3 maximum elements of the array in their original order are
15 34 9

  1. C++の配列で最大GCDのペアを検索します

    正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。

  2. 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