정수 배열을 입력 배열은 양뿐만 아니라 부정적인있다. 하나 이상의 서브 어레이로 이루어지는 이상의 연속하는 정수 배열. 모든 하위 배열의 최대를 추구합니다.
소요 시간 복잡도는 O (n)이된다.
예 1 :
입력 : nums = [-2,1, 설 포닐, -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/
문제 해결 아이디어 (동적 프로그래밍) :
최대 : 최대 값과 서브 어레이의 첫 번째 요소 합계의 초기 값 : 현재의 서브 - 어레이의 첫 번째 요소의 초기 값.
배열을, 합계의 전류 값이 결정되며, 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;
}
};