[우 객] 연속 서브 배열 의 총화

2331 단어 알고리즘
제목 설명:
HZ 는 가끔 전문 적 인 문 제 를 가지 고 컴퓨터 학과 가 아 닌 친구 들 을 속인다.오늘 테스트 팀 이 회 의 를 마 친 후에 그 는 또 말 했다. 오래된 1 차원 모델 인식 에서 연속 적 인 서브 벡터 의 최대 와 벡터 가 모두 양수 일 때 문 제 는 잘 해결 된다.그러나 벡터 에 마이너스 가 포함 되 어 있다 면 어떤 음 수 를 포함해 야 하 며 옆 에 있 는 정수 가 보완 되 기 를 기대 해 야 하 는가?예 를 들 어 {6, - 3, - 2, 7, - 15, 1, 2, 2}, 연속 자 벡터 의 최대 합 은 8 (0 번 부터 3 번 까지) 이다.너 는 그 에 게 속 는 것 이 아니 냐?(하위 벡터 의 길 이 는 적어도 1)
사고방식: tempSum 으로 누적 값, max Sum 기록 및 최대 기록
1. 하나의 숫자 A 에 대해 A 의 왼쪽 누적 수가 마이너스 가 아니라면 A 를 더 하면 A 보다 작 지 않 고 누적 치가 전체 와 기여 하 는 것 이 라 고 생각 합 니 다.앞의 몇 가지 누적 치 마이너스 라면 합계 에 해롭다 고 생각 하고 tempSum 은 현재 값 을 기록 합 니 다.
2 、 이때 tempSum 이 max Sum 보다 크 면 max Sum 의 값 을 갱신 합 니 다
알고리즘 시간 복잡 도: O (N)
class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        if(array.size()==0){
            return 0;
        }
        int tempSum=array[0];
        int maxSum=array[0];
        //            
        for(int i=1;i<array.size();i++){
            //           ,            
            if(tempSum<=0){
                tempSum=array[i];
            }
            else{
                tempSum+=array[i];
            }
            if(tempSum>maxSum){
                maxSum=tempSum;
            }
        }
        return maxSum;
    }
};

좋은 웹페이지 즐겨찾기