졸렬한 알고리즘: 하위 배열 의 최대 합 을 구하 십시오.
나의 졸렬한 생각: 1. 마 이 너 스 를 만 나 는 것 은 현재 와 값 sum 을 부분 변수 result 로 저장 하 는 것 입 니 다.2. 음 수 를 더 하면 sum 값 이 0 보다 작 습 니 다.다음 것 부터 다시 계산 합 니 다.첫 번 째 정 수 를 찾 아 다시 화 해 를 구하 기 시작 하 다.첫 번 째 졸렬한 코드 는 참고 없 이 자신 이 썼 다.
int[] arr={4,0,-3,10,-4,7,-2,5};
int sum=0;
int result=-100; //
for(int i=0;i0){ // 0,sum
sum=sum+arr[i];
}else { // 0
if(sum>result){ // result
result=sum;
}
if(sum+arr[i]>0){ // 0
sum=sum+arr[i]; // 0,
}else { // 0, sum 0
sum=0;
}
}
}
if(sum>result){ // sum result
result=sum;
}
System.out.println("result="+result+" sum="+sum );
위의 알고리즘 은 sum + arr [i] < 0 의 상황 sum = 0 을 최적화 시 킬 수 있 습 니 다. 여 기 는 다음 정 수 를 찾 는 것 으로 바 꿔 야 합 니 다.이렇게 모든 음 수 는 두 번 의 대 비 를 하지 않 고 한 번 에 0 보다 작은 대 비 를 하면 된다.
int[] arr={1, -2, 3, 10, -4, 7, 2, -5};
int sum=0;
int result=arr[0];
for(int i=1;i=0){
sum=sum+arr[i];
}else {
if(sum>result){
result=sum;
}
if(sum+arr[i] < 0){
while(iresult){
result=sum;
}
System.out.println("result="+result);
위의 프로그램 은 모두 음 수 를 입력 할 때 달 릴 수 없다.다음 프로그램 은 가능 합 니 다.
int[] arr={-9, -2, -3, 10, 5, -1,-2, 5};
int sum=arr[0];
int result=arr[0];
for(int i=1;i=0){
if(sum<0){
sum=arr[i]; // sum
}else {
sum=sum+arr[i];
}
}else {
if(sum>result){
result=sum;
}
if(sum+arr[i] < 0){
sum=arr[i]; // ,
}else {
sum=sum+arr[i];
}
}
}
if(sum>result){
result=sum;
}
System.out.println("result="+result);
모두 마이너스 일 때 sum 값 은 하나의 마이너스 입 니 다.result 와 비교 하면 result 를 업데이트 할 수 있 습 니 다.
관건 적 인 사상 은 마 이 너 스 를 만 났 을 때 이 마이너스 부터 계산 하 는 것 이다.그러나 다음 수가 정수 인 것 을 만 났 을 때 sum 을 이 정수 로 초기 화 합 니 다.
위의 코드 는 순 전 히 자기가 쓴 것 이 니, 정 답 은 역시 인터넷 을 보 세 요!!
http://www.cnblogs.com/aLittleBitCool/archive/2011/01/16/1936842.html 인터넷 에서 의 표준 답안 은 여전히 훨씬 간단 하 다 는 것 을 발견 하 였 다.속되다
직접 추가 하면 서 최대 치 를 업데이트 합 니 다.0 보다 작 으 면 바로 다시 추가!!!간단 해 죽 겠 어 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.