제목 설명
HZ 가끔 그 이외의 컴퓨터 과학 학생을 깜박 일부 전문적인 문제를 얻는다. 테스트 그룹이 오늘 종료됩니다 후, 그는 일 말했다 : 벡터는 양의 정수, 해결할 문제가있을 때 이전 차원 패턴 인식에서, 종종 최대 연속 서브 벡터를 계산하는 것이 필요하다. 벡터가 음수를 포함하는 경우에는, 그것을 만회 할 옆에 양수를 음수를 포함하고 기대해야합니까? 예를 들면 : {6, -3, -2,7-, -15,1,2,2}, 및 (8)의 최대 연속 서브 벡터 (제까지 0에서 시작). 최대 연속 서브 배열 및 반환하고 당신이 그를 살 속지 않을 것이다? (부 벡터의 길이는 적어도 1)
문제 해결 아이디어
X가 함께 좌측 음이 아닌 개수 인 경우에는 다수 (X)의 어레이를 들어, x 값이 큰 추가 가능하므로 숫자는 X 전에 전체적으로 기여하고 있다고 믿는다. 처음 몇가 음수까지 추가 할 경우, 합계에 유해한 것으로 간주됩니다.
우리는, 그렇지 않으면, CUR = CUR + 현재 수를 CUR <0, 다음 포기하는 경우, 이전의 최대 수를 기록 최대와 CUR의 현재 값을 기록 현재의 수와 같은 CUR 수 있습니다. 업데이트 CUR 및 최대 최대보다 큰 경우.
참조 코드
1 공용 클래스 해결 { 2 공개 INT FindGreatestSumOfSubArray ( INT [] 배열) { 3 경우 (사항 Array.length == 0 ) { 4 창 0 ; 5 } 6 의 INT CUR = 어레이 [0 ]; 7 INT의 최대 = 어레이 [0 ]; 8 대는 ( int로 I = 1; I <사항 Array.length; 내가 ++ ) { 9 CUR CUR => 0? 어레이 [I] + CUR : 배열 [I]; (10) 만약 (최대 < {CUR) 11 최대 = CUR; 12 } 13 } 14 리턴 최대; 15 } 16 }