졸렬한 알고리즘: 하위 배열 의 최대 합 을 구하 십시오.
나의 졸렬한 생각: 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에 따라 라이센스가 부여됩니다.