C++で変更された配列の最小値の可能な最大値を見つけます
この問題では、サイズnと数値Sの配列arr []が与えられます。私たちのタスクは、変更された配列の最小値の可能な最大値を見つけることです。 。
アレイを変更するためのルールは次のとおりです
-
変更前と変更後の配列要素の合計の差はSである必要があります。
-
変更された配列の負の値は許可されていません。
-
変更された配列の場合、配列の最小値を最大化する必要があります。
-
配列の変更は、配列の任意の要素を増減することで実行できます。 。
これらの制約を使用して、新しい配列を見つけ、配列の最小要素の最大化された値を返す必要があります。
問題を理解するために例を見てみましょう
Input : arr[] = {4, 5, 6} S = 2
Output : 4 説明
変更された配列は{4、5、5}
ソリューションアプローチ
変更された配列の最小値を最大化する必要があります。これは、 0(可能な限り最小)の間にある最小値の最適値の二分探索を使用して行います。 およびarr min (可能な限り最大)。可能な限り小さい値の違いを確認します。
特別な条件
Sが配列の合計よりも大きい場合、解決策はありません。
Sが配列の合計に等しい場合、0が最小要素の値になります。
例
ソリューションの動作を説明するプログラム
#include <iostream>
using namespace std;
int findmaximisedMin(int a[], int n, int S){
int minVal = a[0];
int arrSum = a[0];
for (int i = 1; i < n; i++) {
arrSum += a[i];
minVal = min(a[i], minVal);
}
if (arrSum < S)
return -1;
if (arrSum == S)
return 0;
int s = 0;
int e = minVal;
int ans;
while (s <= e) {
int mid = (s + e) / 2;
if (arrSum - (mid * n) >= S) {
ans = mid;
s = mid + 1;
}
else
e = mid - 1;
}
return ans;
}
int main(){
int a[] = { 4, 5, 6 };
int S = 2;
int n = sizeof(a) / sizeof(a[0]);
cout<<"The maximum value of minimum element of the modified array is "<<findmaximisedMin(a, n, S);
return 0;
} 出力
The maximum value of minimum element of the modified array is 4
-
C++の二分探索木で最小値のノードを見つけます
1つの二分探索木があるとします。二分探索木で最小要素を見つける必要があります。したがって、BSTが以下のような場合- 最小要素は1になります。 左のサブツリーは常に小さい要素を保持していることがわかっています。したがって、左がnullになるまで左のサブツリーを何度もトラバースすると、最小の要素を見つけることができます。 例 #include<iostream> using namespace std; class node{ public: node *left;
-
二分探索木の最小値を見つけるためのC++プログラム
二分探索木の最小値を見つけるプログラムです。 アルゴリズム Begin Declare nd as a structure. Declare d to the integer datatype. Declare pointer lt to the structure nd type. Declare pointer lt to the structure nd type. Declare function new_nd() to the structure nd t