C ++を使用して、行列内の合計が最大のペアを見つけます
この記事では、特定の行列または2次元配列で合計が最大のペアを見つける方法について説明します。例
Input : matrix[m][n] = {
{ 3, 5, 2 },
{ 2, 6, 47 },
{ 1, 64, 66 } }
Output : 130
Explanation : maximum sum is 130 from element pair 64 and 66.
Input : matrix[m][n] = {
{ 55, 22, 46 },
{ 6, 2, 1 },
{ 3, 24, 52 } }
Output : 107
Explanation : maximum sum is 130 from element pair 55 and 52. 解決策を見つけるためのアプローチ
問題なく特定の問題を解決するためのさまざまな手順について簡単に説明しましょう。
ブルートフォースアプローチ
ブルートフォースアプローチを適用できます。つまり、最初の2つの要素の合計でMAX変数を初期化し、新しい合計値であるMAX MAXよりも重要である場合は、すべてのペアの配列とチェックサムをトラバースします。ただし、このプロセスは、O((m * n)2)の時間計算量により時間がかかります。
効率的なアプローチ
効率的なアプローチを適用できます。つまり、2変数のMAX1とMAX2を0で初期化してから、2次元配列をトラバースします。現在の要素がMAX1よりも重要であるかどうかを確認します。はいの場合は、MAX2をMAX1に、MAX1を既存の部品に置き換えます。このようにして、2つの最大数を見つけることができ、明らかに、2つの整数の合計が最大になります。
例
#include <bits/stdc++.h>
using namespace std;
int main() {
int m = 3, n = 3;
// initialising matrix with values
int matrix[m][n] = {
{ 55, 22, 46 },
{ 6, 2, 1 },
{ 3, 24, 52 }
};
// initialising MAX1 and MAX2 to keep two maximum numbers.
int MAX1 = INT_MIN;
int MAX2 = INT_MIN;
int result;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// check if the element is greater than MAX1.
if (matrix[i][j] > MAX1) {
MAX2 = MAX1;
MAX1 = matrix[i][j];
}
// check if the current element is between MAX1 and MAX2.
else if (matrix[i][j] > MAX2 && matrix[i][j] <= MAX1) {
MAX2 = matrix[i][j];
}
}
}
// calculating maximum sum by adding both maximum numbers.
result = MAX1 + MAX2;
cout << "maximum sum in Matrix : " << result ;
return 0;
} 出力
maximum sum in Matrix : 107
上記のコードの説明
- 要素を2次元配列に格納し、最小値INTでMAX1とMAX2を初期化します。
- マトリックスをトラバースします。
- 現在の部分がMAX1よりも重要である場合は、MAX2をMAX1に置き換え、MAX1を現在の要素に置き換えます。
- 現在の部分がMAX1よりも小さく、MAX2よりも意味がある場合は、MAX2を現在の要素に置き換えます。
- 2つのMAX1とMAX2を追加して結果を計算し、作業を印刷します。
結論
この記事では、与えられた行列で最大の合計を持つペアを見つけることについて説明しました。解決策を見つける方法について説明し、そのためのC++コードについても説明しました。このコードは、Java、C、Pythonなどの他の言語で記述できます。この記事がお役に立てば幸いです。
-
C++の配列で最大GCDのペアを検索します
正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。
-
二分探索アプローチを使用して最大サブアレイ合計を見つけるC++プログラム
二分探索は、実行時の複雑さがΟ(log n)の高速検索アルゴリズムです。この検索アルゴリズムは、分割統治の原則に基づいて機能します。このアルゴリズムが正しく機能するためには、データ収集がソートされた形式である必要があります。 バイナリ検索は、コレクションの真ん中のアイテムを比較することによって特定のアイテムを検索します。一致する場合は、アイテムのインデックスが返されます。中央のアイテムがアイテムよりも大きい場合、そのアイテムは中央のアイテムの左側にあるサブ配列で検索されます。それ以外の場合、アイテムは中央のアイテムの右側のサブ配列で検索されます。このプロセスは、サブアレイのサイズがゼロになる