안전 offer30 증명 : 최대의 서브 - 어레이 및 연속

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

추천

출처www.cnblogs.com/wxwhnu/p/11415928.html