1 명 제목 설명
HZ 가끔 그 이외의 컴퓨터 과학 학생을 깜박 일부 전문적인 문제를 얻는다. 테스트 그룹이 오늘 종료됩니다 후, 그는 일 말했다 : 벡터는 양의 정수, 해결할 문제가있을 때 이전 차원 패턴 인식에서, 종종 최대 연속 서브 벡터를 계산하는 것이 필요하다. 벡터가 음수를 포함하는 경우에는, 그것을 만회 할 옆에 양수를 음수를 포함하고 기대해야합니까? 예를 들면 : {6, -3, -2,7-, -15,1,2,2}, 및 (8)의 최대 연속 서브 벡터 (제까지 0에서 시작). 최대 연속 서브 배열 및 반환하고 당신이 그를 살 속지 않을 것이다? (부 벡터의 길이는 적어도 1이다).
이 개 아이디어와 방법, C ++ 핵심 코드
2.1 최대 함수
INT temp_max = 어레이 [0];
INT MAX_NUM = 어레이 [0];
대해 INT (I = 1, i)는 (array.size를 <; 내가 ++) {
temp_max = 최대 (어레이 [i]는, 어레이 [I] + temp_max);
MAX_NUM = 최대 (temp_max, MAX_NUM);
}
MAX_NUM를 반환;
2.2 endMaxSum 현재 최대 연속 서브 - 소자와 상기 시퀀스의 끝을 나타낸다 때 endMaxNum <0의 배열 endMaxNum = [I] + = endMaxNum 달리 배열 [I]
. (1) IF (array.empty ()) 2 복귀 0 ] . (3) IF (array.size () == 1. ) 4. 리턴 어레이 [ 0 ] . 5 . 6 INT maxSum = 어레이 [ 0 ] // 최대 연속 시퀀스 및 7 INT endMaxSum = maxSum; // 현재 최대 연속 서브 시퀀스들과 요소의 단부 (8). 대 ( INT I = 1. , I는 <array.size (); ++ I) { . 9 IF (endMaxSum> 0 ) 10 endMaxSum + = 배열 [I] . 11 다른 12 endMaxSum = 배열 [I]; 13 의 경우 (endMaxSum> ) = 14 endMaxSum; 15 } 16 창 ;
참고 자료
https://blog.csdn.net/zjwreal/article/details/88608962