整数配列を入力し、配列は、正にも負を持っています。一つまたはサブアレイからなる複数の連続整数配列。全てのサブアレイの最大値を求めると。
所要時間の複雑さはO(n)があります。
例1:
入力:NUMS = [-2,1、-3,4、 -1,2,1、-5,4]
出力:6
説明:連続サブアレイ[4、-1,2,1]、および最も6。
ヒント:
1 <= arr.length <= 10 ^ 5
-100 <= ARR [I] <= 100
注:同じ問題が存在するタイトル53及びマスタ局:HTTPS://leetcode-cn.com/problems/maximum-subarray/
問題解決のためのアイデア(動的計画法):
最大:最大値と第1の素子のサブアレイ、初期値、合計:現在のサブ配列と最初の要素の初期値。
アレイを介して、合計の電流値が決定され、0未満であれば、最初から現在の要素が再び蓄積され、最大の値を更新します
コードの実装:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len=nums.size();
int max=nums[0];
int sum=max;
for(int i=1;i<len;++i){
if(sum<0){
sum=0;
}
sum+=nums[i];
if(max<sum){
max=sum;
}
}
return max;
}
};