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

C++の配列内のすべての要素に最も近い値を検索します


ここでは、配列内のすべての要素に最も近い値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。

これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)時間で要素を取得できます。

#include<iostream>
#include<set>
using namespace std;
void nearestGreatest(int arr[], int n) {
   set<int> tempSet;
   for (int i = 0; i < n; i++)
      tempSet.insert(arr[i]);
   for (int i = 0; i < n; i++) {
      auto next_greater = tempSet.upper_bound(arr[i]);
      if (next_greater == tempSet.end())
         cout << -1 << " ";
      else
         cout << *next_greater << " ";
   }
}
int main() {
   int arr[] = {10, 5, 11, 6, 20, 12};
   int n = sizeof(arr) / sizeof(arr[0]);
   nearestGreatest(arr, n);
}

出力

11 6 12 10 -1 20

  1. C++の配列内の各要素のSurpasserCountを検索します

    1つの配列Aが与えられたと仮定します。その配列内の各要素の超過者の数を見つける必要があります。超過者は、現在の要素の配列の右側に存在するより大きな要素です。 A ={2、7、5、3、0、8、1}とすると、超過者は{4、1、1、1、2、0、0}であるため、2の右側には4つの数字があります。 4よりも多く、他の人にも同じルールがあります。解決策は非常に単純で、2つのネストされたループがあり、要素ごとに、超過者をカウントして、別の配列に格納します。 例 #include <iostream> using namespace std; void gerSurpassers(int arr[

  2. 配列の最大要素を見つけるためのC++プログラム

    配列には複数の要素が含まれており、配列内の最大の要素は他の要素よりも大きい要素です。 たとえば。 5 1 7 2 4 上記の配列では、7が最大の要素であり、インデックス2にあります。 配列の最大の要素を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int a[] = {4, 9, 1, 3, 8};    int largest, i, pos;    largest = a[0