C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

最大サイズ2の最小パーティションと、C++で指定された値によって制限される合計


問題の説明

正の数の配列arr[]が与えられた場合、次のプロパティを満たす配列内のセットの最小数を見つけます。

  • セットには、最大2つの要素を含めることができます。 2つの要素は連続している必要はありません。
  • セットの要素の合計は、指定されたキー以下である必要があります。与えられたキーが最大の配列要素以上であると想定される場合があります。

arr [] ={1、2、3、4}およびk =5の場合、次の2つのペアを作成できます-

{1、4}および{2、3}

アルゴリズム

  • 配列を並べ替える
  • ソートされた配列の2つのコーナーから2つのポインターを開始します。それらの合計が指定されたキー以下の場合は、それらのセットを作成します。それ以外の場合は、最後の要素のみを考慮します

#include <iostream>
#include <algorithm>
using namespace std;
int getMinSets(int *arr, int n, int key) {
   int i, j;
   sort (arr, arr + n);
   for (i = 0, j = n - 1; i <= j; ++i) {
      if (arr[i] + arr[j] <= key) {
         --j;
      }
   }
   return i;
}
int main() {
   int arr[] = {1, 2, 3, 4};
   int key = 5;
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum set = " << getMinSets(arr, n, key) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum set = 2

  1. | 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つのケースがあります- 最小-こ

  2. C++で分割統治法を使用した最大合計サブアレイ

    正の値と負の値を持つデータのリストが1つあるとします。合計が最大である連続するサブ配列の合計を見つける必要があります。リストに{-2、-5、6、-2、-3、1、5、-6}が含まれているとすると、最大サブ配列の合計は7になります。これは{6、-2、-3の合計です。 、1、5} この問題は、分割統治法を使用して解決します。手順は次のようになります- 手順 − アレイを2つの部分に分割します 次の3つの最大値を見つけます 左側のサブアレイの最大サブアレイ合計 右サブアレイの最大サブアレイ合計 サブアレイが中点を横切るようなサブアレイの最大合計 例 #include <iostr