프로그래머 면접 100문제---3.하위 그룹의 최대 합을 구합니다.
1461 단어 프로그래머 면접 100문제 정선C 언어
문제 설명:
성형수조를 입력하면 수조에 양수도 있고 음수도 있다.수조에 연속된 하나 이상의 정수가 하나의 자수조를 구성하고, 각 자수조마다 하나의 합이 있다.모든 하위 그룹의 최대 값을 구하십시오.요구 시간의 복잡도는 O(n)이다.
예를 들어 입력한 수조는 1,-2,3,10,-4,7,2,-5이고 가장 큰 수조는 3,10,-4,7,2이기 때문에 이 수조의 출력은 18이다.
문제 분석:
해법 1, 직접법,sum[i.j]을 설정하여 수조 중 i에서 j 사이의 모든 숫자의 합을 계산하고 모든sum를 계산하여 그 중에서 가장 큰 것을 구한다. 시간 복잡도는 O(N^2)이다.
int max_sum1(int a[],int n)
{
if(!a || n < 0)
exit(1);
int max = -1;
int i,j,sum;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = i; j < n; j++)
{
sum += a[j];
if(sum > max)
max = sum;
}
}
return max;
}
이 해법은 약간 폭력적이기 때문에 성능이 비교적 낮다.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
해법 2:
/* DP 문제: (a[k]....a[n-1])의 가장 큰 세그먼트와 a[k]를 이미 알고 (a[k]....a[n-1])에 A[k]를 포함하는 가장 큰 세그먼트와 Start[k]를 계산했다면 All[k-1]=max{a[k-1], a[k-1]+Start[k], a[k],*//
int max_sum2(int a[], int n)
{
int i;
int nAll,nStart;
if(!a || n < 0)
exit(1);
nAll = a[n-1];
nStart = a[n-1];
for(i = n - 2; i >= 0; i--)
{
nStart = max(a[i], a[i] + nStart);
nAll = max(nAll,nStart);
}
return nAll;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Red-Black Tree (4) 삽입(insert, insert_fix_up)레드-블랙 트리에서 새로운 노드를 삽입할 때, 새로운 노드는 항상 적색으로 입력한다. case 1: uncle node(12)색과 부모노드의 색이 모두 적색임을 확인.(case 1) target node를 20의 할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.