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
-
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[
-
配列の最大要素を見つけるための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