최대 하위 열 과 문제 풀이 - MaxSubSum
2482 단어 알고리즘
'나 누 어 다스 리 는 것' 은 바로 이 문 제 를 해결 하 는 기본 사상 이다. 모든 하위 열 에서 최대 하위 열 과 전체 가 입력 데이터 의 왼쪽 부분 에 나타 날 수도 있 고 전체 가 오른쪽 부분 에 나타 날 수도 있 으 며 입력 데이터 의 중 부 를 넘 어 왼쪽 부분 과 반 부분 을 차지 할 수도 있다.
앞의 두 가지 상황 에서 우 리 는 재 귀적 인 방식 으로 좌우 두 부분 을 여러 번 나 누 어 두 개의 데이터 만 비교 할 때 까지 차례대로 비교적 큰 하위 열 과 를 되 돌려 왼쪽 부분 과 오른쪽 부분의 최대 하위 열 과 를 구 할 수 있다.
세 번 째 는 왼쪽 과 오른쪽 을 뛰 어 넘 는 경우 왼쪽 부분의 최대 와 (왼쪽 의 마지막 요 소 를 포함), 오른쪽 부분의 최대 와 (오른쪽 첫 번 째 요 소 를 포함) 를 구 한 다음 에 이 두 가 지 를 더 할 수 있다.
그 다음 에 왼쪽 최대 하위 열 과 오른쪽 최대 하위 열 을 비교 하고 중부 최대 하위 열 과 를 뛰 어 넘 어 이 입력 데이터 의 최대 하위 열 과 를 구 합 니 다.
예제 프로그램 은 다음 과 같다.
//
// main.c
//
//
// Created by on 16/4/11.
// Copyright © 2016 Wuyuan. All rights reserved.
//
#include
/**
* find a max integer in a,b,c
*
*/
static int max3(int a , int b , int c)
{
return (a>b?a:b)>c?(a>b?a:b):c;
}
static int maxSubSum(const int A[] , int left , int right)
{
int maxLeftSum , maxRightSum;
int maxLeftBorderSum , maxRightBorderSum;
int leftBorderSum , rightBorderSum;
int center , i;
if(left == right)
{
if(A[left] > 0)
return A[left];
else
return 0;
}
center = (left + right)/2;
maxLeftSum = maxSubSum(A, left, center);
maxRightSum = maxSubSum(A, center+1, right);
maxLeftBorderSum = 0;
leftBorderSum = 0;
for (i = center; i>=left; i--) {
leftBorderSum += A[i];
if(leftBorderSum > maxLeftBorderSum)
maxLeftBorderSum = leftBorderSum;
}
maxRightBorderSum = 0;
rightBorderSum = 0;
for (i = center + 1; i<=right; i++) {
rightBorderSum += A[i];
if(rightBorderSum > maxRightBorderSum)
maxRightBorderSum = rightBorderSum;
}
return max3(maxLeftSum , maxRightSum , maxLeftBorderSum + maxRightBorderSum);
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!
");
int arr[8]= {0};
for(int i = 0; i <8 ; i++)
{
printf("type in the integer : ");
scanf("%d",&arr[i]);
}
printf("the max sub arr sum is : %d\r",maxSubSum(arr, 0, 7));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.