C++で1回削除した場合の最大サブアレイ合計
これを解決するには、次の手順に従います-
- n:=配列のサイズ、および:=a [0]
- suff_with_del:=0、suff_with_out_del:=a [0]
- iからn–1の範囲のiの場合
- suff_with_del:=suff_with_del +a[i]およびsuff_with_out_delの最大値
- suff_with_out_del:=a[i]の最大値とsuff_with_out_del+a [i]
- ans:=ansの最大値、suff_with_out_delおよびsuff_with _del
- return res
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int maximumSum(vector<int>& a) { int n = a.size(); int ans = a[0]; int suffix_with_deletion = 0; int suffix_with_not_deletion = a[0]; for(int i = 1;i<n;i++){ suffix_with_deletion = max(suffix_with_deletion + a[i], suffix_with_not_deletion); suffix_with_not_deletion = max(a[i],suffix_with_not_deletion+a[i]); ans = max({ans, suffix_with_not_deletion,suffix_with_deletion}); } return ans; } }; main(){ vector<int> v = {1,-2,0,3}; Solution ob; cout <<ob.maximumSum(v); }
入力
[1,-2,0,3]
出力
4
-
C ++で最大1つの要素を削除した後、サブアレイの最大合計を最大化します
問題の説明 N個の整数の配列arr[]が与えられます。タスクは、最初に最大のサブ配列の合計を見つけてから、サブ配列から最大で1つの要素を削除することです。削除後の最大合計が最大になるように、最大で1つの要素を削除します。 指定された入力配列が{1、2、3、-2、3}の場合、サブ配列の最大合計は{1、3、-2、3}です。次に、-2を削除できます。残りのアレイを削除すると、次のようになります- {1, 2, 3, 3} with sum 9 which is maximum. アルゴリズム 1. Use Kadane’s algorithm to find the maximu
-
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]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す