前几天我的朋友面试头条,给出了这样一道面试题:
有一天的log的数据量,求一天中用户在线峰值和持续时间。
他面试结束后与我讨论,让我也做一下,我晚上就用了点时间做了这个题目。
写完之后我们讨论发现因为思路不同,且他的方法更好,就记录下来跟大家分享一下。
因为只求峰值数据,太多的字段没有加。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuETNyIDNwETOx0yNwADNwIDNyIjNxMDMxIDMy0CN4MTMwATMvw1MwEjMwIzLcRDOzEDMwEzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
写完之后我们对结果,没有问题。又互相看了对方的代码,发现逻辑是不一样的。
不知道大家看出来我们两个逻辑上有什么不同吗?
其实主要的不同是第一部分求每个小时在线人数的思路上的不同:
我的想法是轮询24小时,遍历log数据发现在遍历的时间内就+1;
他的思路是遍历log数据,在数据的开始结束时间内都+1。
他这样做的话就在复杂度上少了很多,至少比我少一半的复杂度。
这其实就是一道大厂非常喜欢考的逻辑算法的题目,我朋友这样的算法自然更好:逻辑清晰,复杂度低。
如果大家还有什么更好的解法欢迎写在下面。
源码git下载地址:https://gitee.com/jingboweilanGO/demo_-log-high.git
如果觉得不错,可以推荐收藏一下,让我也更有动力。