| ai + aj –k|の可能な最小値C++で指定された配列とkに対して
問題の説明
n個の整数と整数Kの配列が与えられます。|ai+ aj – k|の絶対値となるような順序付けされていないペアの総数{i、j}を見つけます。 i!=jの場合は最小限に抑えられます。
例
arr [] ={0、4、6、2、4}およびk =7の場合、最小値を1として次の5つのペアを作成できます
{0、6}、{4、2}、{4、4}、{6、2}、{2、4}
アルゴリズム
可能なすべてのペアを反復処理し、各ペアについて、(ai + aj – K)の値が現在の最小値であるnotよりも小さいかどうかを確認します。したがって、上記の条件の結果として、合計3つのケースがあります-
- abs(ai + aj – K)>最小-このペアは可能な最小値にカウントされないため、何もしません。
- abs(ai + aj – K)=最小-ペアのカウントをインクリメントして、可能な最小値にします。
- abs(ai + aj – K)<最小-最小値を更新し、カウントを1に設定します。
例
#include <iostream> #include <climits> #include <cmath> using namespace std; void getPairs(int *arr, int n, int k) { int minValue = INT_MAX; int pairs = 0; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { int val = abs(arr[i] + arr[j] - k); if (val < minValue) { minValue = val; pairs = 1; } else if (val == minValue) { ++pairs; } } } cout << "Min value = " << minValue << endl; cout << "Total pairs = " << pairs << endl; } int main() { int arr[] = {0, 4, 6, 2, 4}; int k = 7; int n = sizeof(arr) / sizeof(arr[0]); getPairs(arr, n, k); return 0; }
出力
上記のプログラムをコンパイルして実行する場合。次の出力を生成します-
Min value= 1 Total pairs = 5
-
C++の配列内のすべての要素に最も近い大きい値を検索します
ここでは、配列内のすべての要素に最も近い大きい値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)
-
C++で可能なすべてのサブアレイの中で可能な最小LCMおよびGCD
サイズNの配列arrがあるとします。これにはN個の正の数があります。考えられるすべてのサブアレイの最小要素を見つける必要があります。アレイが{2、66、14、521}であり、最小LCMが2、GCDが1であるとします。 貪欲なアプローチを使用してこの問題を解決します。要素の数を減らすとLCMが少なくなり、配列サイズを増やすとGCDが少なくなります。配列から最小の要素を見つける必要があります。これは単一の要素であり、LCMが必要になります。 GCDの場合、GCDはアレイのすべての要素のGCDになります。 例 #include <iostream> #include <algor