C++での特定の配列のarr[i]%arr[j]の最大値
この問題では、n個の要素の配列が与えられます。私たちのタスクは、特定の配列のarr [i]%arr[j]の最大値を見つけるプログラムを作成することです。
したがって、基本的には、配列の2つの要素を分割しながら、最大の余りの値を見つける必要があります。
問題を理解するために例を見てみましょう
入力 −配列{3、6、9、2、1}
出力 − 6
説明 −
3%3 = 0; 3%6 = 3; 3%9 = 3; 3%2 = 1; 3%1 = 0 6%3 = 0; 6%6 = 0; 6%9 = 6; 6%2 = 0; 6%1 =0 9%3 = 0; 9%6 = 3; 9%9 = 0 9%2 = 1; 9%1 = 0 2%3 = 2; 2%6 = 2; 2%9 = 2; 2%2 = 0; 2%1 = 0 1%3 = 1; 1%6 = 1; 1%9 = 1; 1%2 =1; 1%1 = 0 Out the above remainders the maximum is 6.
したがって、解決策を見つけるための直接的なアプローチは、すべてのペアの余りを計算してから、それらすべての最大値を見つけることです。ただし、時間計算量はn 2 のオーダーになるため、このアプローチは効果的ではありません。 。
したがって、効果的な解決策は、y> xのときにx%yの値が最大になり、残りがxになるというロジックを使用することです。そして、配列のすべての要素のうち、最大2つの要素を取得すると、結果は最大になります。このために、配列を並べ替えてから、最後と最後から2番目の要素を繰り返して結果を提供します。
例
ソリューションの実装を説明するプログラム
#include <bits/stdc++.h> using namespace std; int maxRemainder(int arr[], int n){ bool hasSameValues = true; for(int i = 1; i<n; i++) { if (arr[i] != arr[i - 1]) { hasSameValues = false; break; } } if (hasSameValues) return 0; sort(arr, arr+n); return arr[n-2]; } int main(){ int arr[] = { 3, 6, 9, 2, 1 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The maximum remainder on dividing two elements of the array is "<<maxRemainder(arr, n); return 0; }
出力
The maximum remainder on dividing two elements of the array is 6
-
C++の配列内のすべての要素に最も近い値を検索します
ここでは、配列内のすべての要素に最も近い値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)時間で
-
C++の整数の配列で最大の積を持つペアを見つけます
配列Aがあるとすると、n個の異なる要素があります。 xとyの積が最大になるように、配列Aからペア(x、y)を見つける必要があります。配列には正または負の要素が含まれる場合があります。配列がA=[-1、-4、-3、0、2、-5]のようであるとすると、積が最大になるため、ペアは(-4、-5)になります。 この問題を解決するには、positive_max、positive_second_max、negative_max、negative_second_maxの4つの数値を追跡する必要があります。最後に、(positive_max *positive_second_max)が(negative_ma