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

C++で別の配列を使用して要素を最大化する


問題の説明

サイズnの2つの配列がある場合、2番目の配列の要素を使用して最初の配列を最大化し、形成された新しい配列に、2番目の配列の優先順位を与える両方の配列のn個の最大で一意の要素が含まれるようにします。つまり、2番目の配列のすべての要素が最初の配列の前に表示されます。配列。要素の出現順序は、出力でも入力と同じに保つ必要があります

arr1 [] ={12、15、10}およびarr2 [] ={16、17、5}の場合、順序を維持することにより、{16、17、15}が両方の配列からの最大要素になります。

アルゴリズム

1. Create temporary array of size 2 * n
2. Store elements of arr1 and arr2 in temporary array and sort it in descending order
3. To keep the order of elements according to input arrays we will use hash table
4. Store first n largest unique elements of temporary array in hash table
5. Traverse the second array and store that elements of second array in temporary array that are present in hash table
6. Similarly, traverse the first array and store the elements that are present in hash table
7. In this way we get n unique and largest elements from both the arrays in temporary array

#include <bits/stdc++.h>
using namespace std;
void printArray(int *arr, int n){
   for (int i = 0; i < n; ++i) {
      cout << arr[i] << " ";
   }
   cout << endl;
}
bool compare(int a, int b){
   return a > b;
}
void getMaxElements(int *arr1, int *arr2, int n){
   int temp[2 * n];
   int k = 0;
   for (int i = 0; i < n; ++i) {
      temp[k] = arr1[i];
      ++k;
   }
   for (int i = 0; i < n; ++i) {
      temp[k] = arr2[i];
      ++k;
   }
   sort(temp, temp + 2 * n, compare);
   unordered_set<int> hash;
   int i = 0;
   while (hash.size() != n) {
      if (hash.find(temp[i]) == hash.end()) {
         hash.insert(temp[i]);
      }
      ++i;
   }
   k = 0;
   for (int i = 0; i < n; ++i) {
      if (hash.find(arr2[i]) != hash.end()) {
         temp[k++] = arr2[i];
         hash.erase(arr2[i]);
      }
   }
   for (int i = 0; i < n; ++i) {
      if (hash.find(arr1[i]) != hash.end()) {
         temp[k++] == arr1[i];
         hash.erase(arr1[i]);
      }
   }
   for (int i = 0; i < n; ++i) {
      arr1[i] = temp[i];
   }
}
int main(){
   int arr1[] = {12, 15, 10};
   int arr2[] = {16, 17, 5};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   cout << "First array:\n";
   printArray(arr1, n);
   cout << "Second array:\n";
   printArray(arr2, n);
   getMaxElements(arr1, arr2, n);
   cout << "Maximum array:\n";
   printArray(arr1, n);
   return 0;
}
出力 上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

First array:
12 15 10
Second array:
16 17 5
Maximum array:
16 17 15

  1. ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム

    ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54

  2. ポインタを使用して配列の要素にアクセスするC++プログラム

    ポインタは、変数のメモリ位置またはアドレスを格納します。つまり、ポインタはメモリ位置を参照し、そのメモリ位置に格納されている値を取得することは、ポインタの逆参照と呼ばれます。 ポインタを使用して配列の単一の要素にアクセスするプログラムは、次のようになります- 例 #include <iostream> using namespace std; int main() {    int arr[5] = {5, 2, 9, 4, 1};    int *ptr = &arr[2];    cout<<&q