/ * 제목 : 배열이 숫자 배열의 절반 이상 길이를 표시하는 횟수를 가지고,이 번호를 찾을 수 있습니다. 예를 들어, 입력 어레이 (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; }