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, 10, 20, 12};
   int n = sizeof(arr) / sizeof(arr[0]);
   nearestGreatest(arr, n);
}

出力

11 10 12 11 -1 20

  1. すべての要素がk以上になるまで配列の要素を追加するC++プログラム

    ソートされていない要素の配列、つまりarr []があり、整数Kがあり、すべての要素を以上にするために配列の要素を追加するために必要な最小ステップ数を見つける必要があります。 K 。配列の2つの要素を追加して、それらを1つにすることができます。 例 Input: arr[] = {1 10 12 9 2 3},K = 6 Output: 2 説明 まず、(1 + 2)を追加できます 、したがって、新しい配列は 3 10 12 9 3 、(3 + 3)を追加できます 、したがって、新しい配列は 6 10 12 9 、リスト内のすべての要素が 6より大きいことがわかります 。したがって、出力

  2. C ++では、すべての要素がk以上になるまで配列の要素を追加します。

    配列 −配列は、同じデータ型の要素のコンテナであり、その要素のインデックスは0です。 この問題では、整数の配列を使用します。そして、すべての要素が指定された数より大きいかどうかを確認します。ここでは、配列のすべての要素が指定された数k以上であるかどうかを確認します。そうでない場合は、配列の2つの最小要素を追加し、この合計を1つの要素として扱います。次に、新しいアレイの同じ条件を再度確認します。条件が真であることが判明した場合、合計が実行された回数が返されます。 Array = { 2, 6,3,12, 7} K = 5 Output : 1 説明 −最初に、すべての要素がkより大きいかどう