정렬 된 배열 에서 두 개의 수의 합 이 m 인 모든 하위 조합 을 찾 아 라.

1033 단어 알고리즘
제목 은 이해 하기 어렵 지 않 으 니 예 를 들 어 보 자.
int a[] = {1,2,3,4,5,6};m 는 6, 여기 1 + 5 = 6, 2 + 4 = 6 이 므 로 아래 표 시 된 0, 4 와 1, 3 을 되 돌려 야 합 니 다.
문제 풀이 방향 은 순 서 를 잘 배열 한 배열 이기 때문에 2 분 에 찾 는 사상 을 이용 하여 배열 의 머리 와 꼬리 표 지 를 설정 할 수 있 습 니 다. 매번 에 숫자 를 취하 고 m 와 같 는 지 판단 할 수 있 습 니 다. 만약 에 한 조 의 조합 을 찾 아 아래 표 지 를 출력 한 다음 에 머리 표 지 를 뒤로 이동 하고 꼬리 표 지 를 앞으로 이동 하 는 것 과 같 으 면 두 가지 상황 이 있 습 니 다.
1. 두 수의 합 이 m 보다 크 고 배열 이 정렬 되 어 있 기 때문에 꼬리 표 시 는 앞으로 이동 합 니 다.
2. 두 수의 합 은 m 이하 이 고, 머리 표 시 는 뒤로 이동
머리 끝 에 만 남 을 표시 하 는 것 은 모든 조합 을 찾 았 고 순환 이 끝났다 는 것 을 의미한다.
코드 는 다음 과 같 습 니 다:
public static void findNum(int a[],int m){
		int start=0,end=a.length-1;
		//          m ,     
		while(a[start]>m){
			System.out.println("error");
		}
		while(end>start){
			if(a[start]+a[end]==m){
				System.out.println("    :"+start+","+end+" "+a[start]+"+"+a[end]+"="+m);
				start++;
				end--;
			}else if(a[start]+a[end]m){
				end--;
			}
		}
	}

좋은 웹페이지 즐겨찾기