C++の配列arr[]でabs(i – j)* min(arr [i]、arr [j])の最大値を検索します
この問題では、N個の整数値を要求する配列arr []が与えられます。私たちのタスクは、arrayarr []内のabs(i – j)* min(arr [i]、arr [j])の最大値を見つけることです。
問題の説明 − 2つの要素の最小値の最大積値と、それらのインデックス間の絶対差を見つける必要があります。つまり、2つの値iとjの場合、最大化する必要があります。abs(i --j)* min(arr [i]、arr [j])。
入力
arr[] = {5, 7, 3, 6, 4}
出力
16
説明
The maximum value is 16, between index 0 and 4 => abs(0 - 4)*min(arr[0], arr[4]) => 4*min(5, 4) => 4*4 = 16
ソリューションアプローチ
この問題の簡単な解決策は、ネストされたループを使用することです。 2つのループを取り、iとjの各ペアの値を計算します。そして、見つかったすべての値の最大値を返します。
このアプローチは優れていますが、O(n 2 の次数の時間複合体があります。 。
この問題の効果的な解決策は、配列の最後からもう一方の先頭から2つのイテレータ値を使用することです。イテレータの値ごとに、必要な値を見つけて比較し、最大のinmaxVal変数を格納します。これは、両方のイテレータが互いに交差し、最後にmaxValを返すまで行います。
ソリューションの動作を説明するプログラム
例
#include<iostream> using namespace std; int calcMaxProdValue(int arr[], int n) { int maxVal = -100; int currentVal; int start = 0, end = n-1; while (start < end) { if (arr[start] < arr[end]) { currentVal = arr[start]*(end-start); start++; } else { currentVal = arr[end]*(end-start); end--; } maxVal = max(maxVal, currentVal); } return maxVal; } int main(){ int arr[] = {5, 7, 3, 6, 4}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"The maximum value of abs(i – j) * min(arr[i], arr[j]) in an array is "<<calcMaxProdValue(arr,n); return 0; }
出力
The maximum value of abs(i – j) * min(arr[i], arr[j]) in an array is 16
-
C++の配列で最大GCDのペアを検索します
正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。
-
代数式の最大値を見つけるためのC++プログラム
これは、任意の代数式の最大値を見つけるためのC ++プログラムです。(x1 + x2 + x3+。。。+xa)*(y1 + y2+。。。+yb)および(a + b )整数が与えられます。数値と残りのb数値のすべての可能な組み合わせを検討し、それらの値を計算して、そこから最大値を導き出すことができます。 アルゴリズム Begin function MaxValue() : Arguments: a[]=array which store the elements. x, y=integers.