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

最大サブアレイサイズ。C++では、そのサイズのすべてのサブアレイの合計がk未満になります。


このチュートリアルでは、最大サブアレイサイズを見つけて、そのサイズのすべてのサブアレイの合計がk未満になるようにするプログラムについて説明します。

このために、サイズNと整数kの配列が提供されます。私たちのタスクは、指定された配列内のその長さのすべてのサブ配列の合計がk以下になるようにサブ配列の長さを見つけることです。

#include<bits/stdc++.h>
using namespace std;
//finding maximum length subarray
int bsearch(int prefixsum[], int n, int k) {
   int ans = -1;
   //performing binary search
   int left = 1, right = n;
   while (left <= right) {
      int mid = (left + right) / 2;
      int i;
      for (i = mid; i <= n; i++) {
         if (prefixsum[i] - prefixsum[i - mid] > k)
         break;
      }
      if (i == n + 1) {
         left = mid + 1;
         ans = mid;
      }
      else right = mid - 1;
   }
   return ans;
}
//returning maximum subarray size
int maxSize(int arr[], int n, int k) {
   int prefixsum[n + 1];
   memset(prefixsum, 0, sizeof(prefixsum));
   for (int i = 0; i < n; i++)
   prefixsum[i + 1] = prefixsum[i] + arr[i];
   return bsearch(prefixsum, n, k);
}
int main() {
   int arr[] = {1, 2, 10, 4};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 14;
   cout << maxSize(arr, n, k) << endl;
   return 0;
}

出力

2

  1. C++でのmを法とする最大サブアレイ合計

    この問題では、サイズnと整数mの配列が与えられます。私たちのタスクは、C++でmを法とする最大のサブ配列の合計を見つけるプログラムを作成することです。 プログラムの説明 −ここでは、サブアレイのすべての要素の合計をmで割った値を求めます。 問題を理解するために例を見てみましょう 入力 −配列={4、9、2} m =6 出力 − 5 説明 −すべてのサブ配列と除算の余り {4}: 4%6 = 4 {9}: 9%6 = 3 {2}: 2%6 = 2 {4, 9}: 13%6 = 1 {9, 2}: 11%6 = 5 {4, 9, 2}: 15%6 = 3 この問題を解決するために、

  2. C++で絶対差が1以下になるような要素の最大数を見つけます

    n個の要素の配列があるとします。配列から選択する要素の最大数を見つけて、選択した要素の任意の2つの間の絶対差が1以下になるようにする必要があります。したがって、配列が[2、2、3、4、 5]の場合、要素は3になるため、最大カウントのシーケンスは2、2、3になります。 0と1の絶対差は、数値がx型とx + 1型である可能性があることを意味します。したがって、配列要素の頻度を格納するという考え方です。したがって、2つの連続する要素の最大合計が見つかった場合、それが解決策になります。 例 #include <iostream> #include <map> using na