本身题目没有什么难度,分析好题目就避免全部遍历了。
一共2N个数字,其中有N+1个不同的,有某一个数字重复N遍,也就是说,其他N个不同的数字只能出现一次,所以就是判断哪个数字出现大于一次就好了。
int repeatedNTimes(vector<int>& A) {
map<int,int> res;
for (int i=0; i < A.size(); ++i) {
res[A[i]]++; // 可以写到if条件中,(++res[A[i]] > 1)
if (res[A[i]] > 1) {
return A[i];
}
}
return -1;
}
写程序时碰到的问题
1、C++程序要保证非void函数每条支路都有返回值。当时 return -1; 没写,报编译错误: warning: control reaches end of non-void function(非void函数到达结尾时没有返回值)
2、时间问题
在查看时间用时较少的答案时,发现后面都跟有这样一个函数。
static int x = [](){
ios::sync_with_stdio(false);
cin.tie(NULL);
// cout.tie(NULL);
return 0;
}();
在没修改程序的情况下,添加此函数,函数从44ms降至16ms,这也太神奇了吧!
这个C++输入输出流加速问题可以转https://mp.youkuaiyun.com/postedit/88981012