写在前面
首先就是题目要求了,如图:
设计思路
看到的第一想法就是,循环遍历然后记录次数,次数最多的即为水王。但这样的算法未免时间复杂度过高。之后思考了一下,由于水王的发帖数目超过了一半,也就是说我们可以尝试使用消去的方法来做这个事情,我们对id遍历,如果两个相同则+1,如果不同则-1,相当于消去。最后剩下的一个肯定就是水王啦。
代码
直接上代码,是用java写的:
public static void main(String[] args) {
//测试数据
String[] ids ={"111","111","112","113","111","114","111","118","114","111","111"};;
//记录水王的ID
String id = "";
//记录每个ID出现的次数
int intTimes=0;
for (String s : ids) {
if (intTimes == 0) {
id = s;
intTimes += 1;
} else {
if (id.equals(s)) {
intTimes = intTimes + 1;
} else {
intTimes = intTimes - 1;
}
}
}
System.out.println(id + ","+intTimes);
}
运行结果
总结
在看到一个问题的时候,往往第一想法是最好实现也是最麻烦的方法。要学会观察每个问题的独特特征,比如这道题中的超过一半就是一个十分独特的特征。通过这个特征我们就可以把算法进一步简化了。