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
-
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
-
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]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す