데이터 구조 와 알고리즘 디자인 주제 의 - 하위 배열 과 최대 값 구하 기

1465 단어 데이터 구조
제목:
성형 배열 을 입력 하 십시오. 배열 에는 양수 도 있 고 마이너스 도 있 습 니 다.
배열 에서 연속 되 는 하나 또는 여러 개의 정수 가 하나의 키 배열 을 구성 하고 모든 하위 배열 은 하나의 합 이 있다.
모든 하위 배열 의 합 의 최대 치 를 구하 십시오.
예 를 들 어 입력 한 배열 은 1, - 2, 3, 10, - 4, 7, 2, - 5 와 가장 큰 하위 배열 은 3, 10, - 4, 7, 2 이다.
따라서 이 하위 배열 과 18 로 출력 합 니 다.
첫 번 째 방법:
쉽게 생각 나 는 것 은 이중 순환 을 사용 하 는 것 이다.
1 층 은 하위 배열 의 시작 위 치 를 찾 습 니 다: i
2 층 은 하위 배열 의 끝 위 치 를 찾 습 니 다: j
코드 는 다음 과 같 습 니 다:
public static void findMaxSubArySum2(){
		//sum      
		int sum = 0;
		//max        
		int max = 0;
		//          
		int startPos = 0;
		//          
		int endPos = 0;
		int[] array = {-1,2,-3,12,-5,-1,9,-2};
		
		for(int i=0;i<array.length;i++){
			sum = 0;//  
			for(int j=i;j<array.length;j++){
				sum += array[j];
				//                     ,             ,         max
				if(sum > max){
					max = sum;
					startPos = i;//         
					endPos = j+1;//         
				}
			}
		}

		System.out.println("Max:"+max);
		System.out.println("startPos:"+startPos+",endPos:"+(endPos-1));

	}

시간 복잡 도가 N * N 이면 최 적 화 된 방안 은 없 을 까?답 은 긍정 적 이다.
두 번 째 방법:
우리 가 정 수 를 더 하면 증가 한 다 는 것 을 쉽게 이해 할 수 있다.우리 가 마이너스 하 나 를 더 하면 줄 어 들 것 이다.만약 현재 얻 은 것 과 마이너스 라면, 이것 은
다음 누적 에 서 는 버 리 고 다시 0 으로 해 야 한다. 그렇지 않 으 면 이 음 수 는 다음 과 같은 합 을 줄 일 것 이다.
이러한 사고방식 을 바탕 으로 우 리 는 다음 과 같은 코드 를 쓸 수 있다.
4. 567913. 이렇게 하면 우 리 는 많은 최적화 되 었 고 시간 복잡 도 는 N 이라는 것 을 볼 수 있다.

좋은 웹페이지 즐겨찾기