一、填空题40题。时间80分钟
和360实习的题目有一些是反复的。
牛客网题目地址:http://www.nowcoder.com/test/160402/summary。
二、两道编程题,时间70分钟,题目不是特别难,牛客网:http://www.nowcoder.com/test/151724/summary。
例如以下所看到的
第一道:
思路:
统计每一个字符出现的次数。然后遍历一次。找到第一个出现次数为1的字符。
在我的vs上调试能够通过,可是到360里面的编辑器就不行了,说是超时。从题目的hint里能够看出可能是从终端接收数据出问题。
本想一个一个字符接收的。最后时间不够了。
代码:
#include<iostream> #include<string> //#include<vector> using namespace std; int main() { int num; cin>>num; string str; while(num > 0) { num--; getline(cin , str); int len = str.size(); int strmap[256] = {0}; int pos = -1; for(int i = 0 ; i < len ; i++) { strmap[str[i]]++;//统计每一个字符出现的次数 } for(int j = 0 ; j < len ; j++) { if(strmap[str[j]] == 1) { pos = j;//找到第一个仅仅出现一次的字符 break; } } if(pos != -1) cout<<str[pos]<<endl; } return 0; }
更新:题目的意图事实上是不要把输入的数据保存下来,而直接通过一个一个字符的读取而找出第一次出现的字符。此时哈希表里存储的数字不仅代表出现的次数。
初始化哈希表的值为-1。
假设第一次出现,则把字符的位置存储下来。假设又出现了,则把哈希值置为-2,代表字符反复出现,此后不在考虑。
最后对哈希数组遍历。找出全部出现一次(哈希值>=0的)的字符的哈希值最小的(即位置最靠前的)即是所求的字符。
以下的代码能够通过牛客网的測试。
#include <iostream> using namespace std; void InsertStr(int (&str)[256], char c , int &index) { if(str[c] == -1) str[c] = index;//第一次找到字符,则存储它的位置 else if(str[c] >= 0) { str[c] = -2;//假设反复出现,则位置置为-2,表示出现多次,不予考虑 } index++; } char FindFirstLetter(const int (&str)[256]) { int minIndex = 0x7fffffff; char result = '