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

C++での最大平均サブアレイI


n個の要素を持つ配列があるとすると、最大の平均値を持つ、指定された長さkの連続するサブ配列を見つける必要があります。最大平均値を返す必要があります。

したがって、入力が[1,13、-5、-8,48,3]のようで、k =4の場合、出力は(13-5-8 + 48)/ 4=12.0のように12.0になります。

これを解決するには、次の手順に従います-

  • 合計:=0

  • 初期化i:=0の場合、i

    • 合計:=合計+ nums [i]

  • マキシ:=合計

  • 初期化i:=kの場合、i

    • 合計:=合計+ nums [i]-nums [i-k]

    • 合計>マキシの場合、-

      • マキシ:=合計

  • マキシ/kを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   double findMaxAverage(vector<int>& nums, int k) {
      int sum = 0;
      for (int i = 0; i < k; i++) {
         sum += nums[i];
      }
      double maxi = sum;
      for (int i = k; i < nums.size(); i++) {
         sum += nums[i] - nums[i - k];
         if (sum > maxi) {
            maxi = sum;
         }
      }
      return maxi / k;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,13,-5,-8,48,3};
   cout << (ob.findMaxAverage(v, 4));
}

入力

{1,13,-5,-8,48,3}, 4

出力

12

  1. C++での配列の最大平均合計パーティション

    問題の説明 配列が与えられた場合、数値Aの行を最大でK個の隣接する(空でない)グループに分割し、スコアは各グループの平均の合計になります。スコアリングできる最大スコアはいくつですか? 例 入力配列が{9、2、5、3、10}の場合、次のように配列を分割できます- {9} {2、5、3}および{10}の場合、これの平均合計は- 9 +(2 + 5 + 3)/ 3 + 10 =22.33 アルゴリズム この問題を解決するために暗記技術を使用することができます- メモ[i][k]を、A[iからn-1]を最大でK個のパーツに分割する最高のスコアとします 最初のグループでは、A[iからn-1

  2. C++で厳密に増加するサブアレイの最大合計を見つける

    n個の整数の配列があるとします。厳密に増加するサブ配列の最大合計を求めます。したがって、配列が[1、2、3、2、5、1、7]のような場合、合計は8になります。この配列には、厳密に増加する3つのサブ配列があります。これらは{1、2、3}、{2 、5}および{1、7}。最大合計サブ配列は{1、7}です。 この問題を解決するには、最大合計と現在の合計を追跡する必要があります。各要素arr[i]について、これがarr [i – 1]より大きい場合は、これを現在の合計に加算します。それ以外の場合、arr[i]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す