zoukankan      html  css  js  c++  java
  • “寻找水王”问题的解

    写在前面

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

    设计思路

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

    运行结果

    总结

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

  • 相关阅读:
    Java技术 第六次实验 计科1501 胡开辉
    Java技术 第五次实验 计科1501 胡开辉
    Java第四次作业
    Java第三次作业
    Css新增内容
    Html5新增特性
    Jquery图集
    选项卡
    轮播图
    标准命名
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12967258.html
Copyright © 2011-2022 走看看