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

C++で指定されたN個の整数の1つを正確に含む最大の区間を見つけます


N個の異なる整数の配列があるとします。区間[L、R]内の最大要素を見つけて、区間に指定されたN個の整数の1つと1 <=L <=R <=10 5 が含まれるようにする必要があります。 。

したがって、配列がArr =[5、10、200]のようである場合、出力は99990になります。したがって、可能な間隔はすべて[1、9]、[6、199]、および[11、100000]です。最後のものは99990のような最大整数を持っています

アイデアは単純です。間隔に含める要素を修正します。ここで、他の要素を重ねることなく、間隔を左右に拡張する方法を見ていきます。したがって、最初に配列を並べ替える必要があります。次に、固定要素の場合、前の要素と次の要素を使用して終了を決定します。コーナーケースはお世話になります。したがって、最初と最後の間隔を修正するとき。このようにして、すべての要素iについて、間隔の最大長を見つけます。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int maximumSize(vector<int>& vec, int n) {
   vec.push_back(0);
   vec.push_back(100001);
   n += 2;
   sort(vec.begin(), vec.end());
   int max_value = 0;
   for (int i = 1; i < n - 1; i++) {
      int Left = vec[i - 1] + 1;
      int Right = vec[i + 1] - 1;
      int count = Right - Left + 1;
      max_value = max(max_value, count);
   }
   return max_value;
}
int main() {
   vector<int> v;
   v.push_back(200);
   v.push_back(10);
   v.push_back(5);
   int n = v.size();
   cout << "Maximum Size is: " << maximumSize(v, n);
}

出力

Maximum Size is: 99990

  1. C++で与えられた数Nの約数で最大の良い数を見つけます

    この問題では、数Nが与えられます。私たちのタスクは、与えられた数Nの約数で最大の適切な数を見つけることです。 。 かなりの数2です。 問題を理解するために例を見てみましょう Input : N = 15 Output : 15 説明 − Divisors of 15 : 1, 3, 5, 15. ソリューションアプローチ この問題の簡単な解決策は、Nのすべての約数を見つけることです。そして、その数のすべての素数の約数の積として抽出される最大の良い数を見つけます。 例 ソリューションの動作を説明するプログラム #include <bits/stdc++.h> usin

  2. 特定の二分木で最大のBSTサブツリーを検索します-C++で1を設定します

    この問題では、二分木BTが与えられます。私たちのタスクは、特定のバイナリツリーで最大のBSTサブツリーを見つけることです。 。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 二分探索木(BST)は、すべてのノードが以下のプロパティに従うツリーです- 左側のサブツリーのキーの値は、その親(ルート)ノードのキーの値よりも小さくなっています。 右側のサブツリーのキーの値は、その親(ルート)ノードのキーの値以上です。 問題を理解するために例を見てみましょう 入力: