빠른 정렬 - 디지털의 절반 이상 얼굴 질문 제공 - 안전 39- 배열의 발생을 증명하려면

/ * 
제목 : 
	배열이 숫자 배열의 절반 이상 길이를 표시하는 횟수를 가지고,이 번호를 찾을 수 있습니다. 
	예를 들어, 입력 어레이 (9)의 길이는 {1,2,3,2,2,2,5,4,2}. 숫자 2는 다섯 번, 배열 어레이의 반 이상의 길이, 출력 (2)을 표시하기 때문이다. 0 출력이있는 경우. 
* / 
/ * 
아이디어 : 
	고속 행에, 제 N / 2 다수. 
	수는 전체 길이의 절반을 초과하는지 확인합니다. 
* / 
#INCLUDE <iostream> 
#INCLUDE <string.h> 
#INCLUDE <STDIO.H> 
#INCLUDE <SET> 
#INCLUDE <벡터> 

은 USING 스페이스 STD; 

INT 코어 (벡터 <INT> 및 숫자의에 beginIndex INT, INT endIndex에, 타겟 INT) { 
    INT의 K = endIndex에, 
    INT = 브로 번호 [endIndex에] 
    대 (INT I = -endIndex 1] I> = beginIndex의]. I -) { 
        IF (번호 [I]> 발) { 
            스왑 (번호 [ I], 숫자 [K]); 
            K--;
    } 
    경우 (K == 타겟) { 
        반환 번호 [K]; 
    } 다른 경우 (K> 타겟) { 
        복귀 코어 (번호 beginIndex의 K-1 표적); 
    } {다른 
        복귀 코어 (번호, K + 1, endIndex의 대상); 
    } 
} 

BOOL isTarget (벡터 <INT> 및 숫자의 INT targetValue) { 
    INT 시간 = 0; 
    경우 (나는 <numbers.size (); INT 나 0 = I ++) { 
        (번호 [I] == targetValue) {경우 
            배 ++; 
        } 
    } 
    (시간 * 2> numbers.size ()) {경우 
        true를 반환; 
    } 다른 { 
        false를 반환; 
    } 
} 
INT MoreThanHalfNum_Solution (벡터 <INT> 참조) { 
   경우 (numbers.empty ()) 반환 0; 
   타겟 = INT numbers.size () / 2;
   INT targetValue 코어 (숫자 0 numbers.size () - 1 대상) =; 
   COUT << targetValue << ENDL; 
   경우 (isTarget (숫자, targetValue는)) { 
        targetValue를 반환; 
   } 다른 { 
    0을 반환; 
   } 
} 

INT의 main () { 
    벡터 <INT> A = {4,2,1,4,2,4}; 
    COUT << MoreThanHalfNum_Solution (a) << ENDL; 

}

   

추천

출처www.cnblogs.com/buaaZhhx/p/11979119.html