问题描述:
据说腾讯这次笔试题java部分出了这么一道题:
某男人的聊天记录都是与女人发生的,其中有一位的聊天记录超过半数,找出她来,潜在的第三者。
其实这道题也就是要找出频率找过一半得数。
我想到的最简单的方法,就是创建一个大数组count,所有元素初始化为0,遍历记录数组input,如下:
最后遍历一下count,输出最大的即可,时间复杂度O(n),空间复杂度也是如此。
本题似乎有一个条件没有使用,就是频率超过一半。根据这个条件,空间复杂度可以进一度优化。
其实昨晚就想到了成对删除法,就是不知道如何操作,总觉得还是需要标志位,看了一下网上的讨论,以下代码不错:
这相当于成对删除(比较两数,不同则删除掉,否则不操作),由于有一个数频率超过一半,所以最后剩下的必是他。