I wrote C ++ code for this algorithm
char find_more_than_half_shown_number(char* arr, int len){ int i=0; std::vector<int> vec; while(i<len){ if(vec.empty()){ vec.push_back(arr[i]); vec.push_back(1); }else if(vec[0]==arr[i]){ vec[1]++; }else if(vec[0]!=arr[i]&&vec[1]!=0){ vec[1]--; }else{ vec[0]=arr[i]; } i++; } int tmp_count=0; for(int i=0;i<len;i++){ if(arr[i]==vec[0]) tmp_count++; } if(tmp_count>=(len+1)/2) return vec[0]; else return -1; }
and the main function is as follows:
int main(int argc, const char * argv[]) { char arr[]={'A','A','A','C','C','B','B','C','C','C','B','C','C'}; int len=sizeof(arr)/sizeof(char); char rest_num=find_more_than_half_shown_number(arr,len); std::cout << "rest_num="<<rest_num<<std::endl; return 0; }
feliciafay Jan 29 '14 at 19:35 2014-01-29 19:35
source share