有序整数序列,数出所有众数及其个数
模块1:线性扫描
模块2:cnt计数:条件:遇见不等,计a[i-1]的cnt
notice: 最后一个数一定不会入栈,需要单独处理
1 #include2 #include 3 #include 4 using namespace std; 5 void findMode(vector &a, stack &x, stack &y){ 6 int cnt = 1; 7 y.push(-1); 8 for (int i = 1; i < a.size(); i++){ 9 if (a[i] == a[i-1])10 cnt++;11 else{12 if (cnt == y.top()){13 x.push(a[i-1]);14 y.push(cnt);15 }16 else if (cnt > y.top()){17 while( !x.empty() )18 x.pop();19 while( !y.empty() )20 y.pop();21 x.push(a[i-1]);22 y.push(cnt);23 }24 cnt = 1;25 }26 }27 if (cnt == y.top()){28 x.push(a[a.size()-1]);29 y.push(cnt);30 }31 else if (cnt > y.top()){32 while( !x.empty() )33 x.pop();34 while( !y.empty() )35 y.pop();36 x.push(a[a.size()-1]);37 y.push(cnt);38 }39 }40 int main(){41 vector a;42 stack x, y;43 a.push_back(1);44 a.push_back(2);45 a.push_back(3);46 findMode(a, x, y);47 while( !x.empty() || !y.empty() ){48 cout << x.top() << " " << y.top() << endl;49 x.pop();50 y.pop();51 }52 return 0;53 }