“寻找水王”问题的解

写在前面

首先就是题目要求了,如图:

设计思路

看到的第一想法就是,循环遍历然后记录次数,次数最多的即为水王。但这样的算法未免时间复杂度过高。之后思考了一下,由于水王的发帖数目超过了一半,也就是说我们可以尝试使用消去的方法来做这个事情,我们对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);
    }

运行结果

总结

在看到一个问题的时候,往往第一想法是最好实现也是最麻烦的方法。要学会观察每个问题的独特特征,比如这道题中的超过一半就是一个十分独特的特征。通过这个特征我们就可以把算法进一步简化了。

posted @ 2020-05-26 18:25  武神酱丶  阅读(162)  评论(0编辑  收藏  举报