2016 阿里校招研发算法题 9.9
Posted SeeKHit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016 阿里校招研发算法题 9.9相关的知识,希望对你有一定的参考价值。
题目大意:
输入一个字符串流,里面有数字和非数字,非数字将数字隔开了,要找出,出现次数最多的数字。
思路:
先将所有非数字用统一字符替换,然后找出数字,需要判断下一个字符是不是数字,然后将数字存到hashmap里面,出现存在过的数字,hashmap的value+1;最后输出value值最大的数字。
代码:
1 #include"iostream" 2 #include"map" 3 #include"vector" 4 #include"algorithm" 5 #define MAX 10000 6 using namespace std; 7 8 char c[MAX]; 9 bool tag; 10 map<int, int> m,msort; 11 12 int main() 13 { 14 while (cin >> c) 15 { 16 tag = false; 17 for (int i = 0; i < strlen(c); i++) 18 { 19 if (c[i] < ‘0‘ || c[i]>‘9‘) 20 c[i] = ‘*‘; 21 cout << c[i]; 22 } 23 cout << endl; 24 for (int i = 0,j=0; i < strlen(c); i++) 25 { 26 int t=0; 27 while (c[i] == ‘*‘) 28 i++; 29 while (c[i] != ‘*‘&&c[i]!=‘\0‘) 30 { 31 tag = true; 32 t += c[i] - ‘0‘; 33 34 if (c[i + 1] == ‘\0‘) 35 break; 36 37 if (c[i + 1] == ‘*‘) 38 tag = false; 39 40 if (tag) 41 t *= 10; 42 i++; 43 } 44 if (m.count(t)) 45 { 46 m[t]++; 47 }else 48 m[t] = 1; 49 50 j++; 51 } 52 53 map<int, int>::iterator res = m.begin(); 54 for (map<int, int>::iterator iter = m.begin(); iter!=m.end(); iter++) 55 { 56 if (iter->second > res->second) 57 res = iter; 58 59 } 60 cout << res->first << endl; 61 62 m.clear(); 63 } 64 system("pause"); 65 66 }
以上是关于2016 阿里校招研发算法题 9.9的主要内容,如果未能解决你的问题,请参考以下文章