求n个数中出现个数超过n/3的元素

要求空间复杂度O(1)。

思路:方便起见,先假设答案是a。首先我定义3个组,然后取3个数,按照它们3个两两是否相同划分到1~3个组里。接下来我们重复这样的过程:踢一轮、取1个、踢一轮、取1个……
踢是这么操作的:如果这3个组每个组都不空,那么我每个组都踢掉一个,直到出现至少1个空组。这样做是因为如果某一轮我踢掉了一个答案a,那么我一定同时踢掉了2个非a,如果某一轮没有踢a,那我一定踢掉了3个非a。
然后再取1个x:踢完一轮后至少有1个空组,如果x属于某个非空组,就把它放进去,否则就利用那个空组,把空组设为x的组。
这样先踢再取再踢,直到把所有数取完。这时剩下至多2个非空组,所有被踢掉的数中a不超过1/3,所以剩下的数中a不少于1/3,所以如果三组全空,则不存在这样的a,如果只剩下1组,这组所代表的数值就是答案a,如果剩下2组,答案无从确定,再对原数据扫一边从而判断即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,049评论 0 13
  • 第一篇文章,第一次将想法转化成文字,太多的东西其实想表达出来,却发现要写出来确实很难。 ‘’从0开始,慢慢...
    到源源静好好阅读 173评论 0 1
  • 文 I 鬼纹 参赛编号:557 雨中伊宁 16号的下午,我来到了伊宁。 迎着风雨出了火车站,正面迎来很熟悉的人群:...
    鬼纹阅读 358评论 4 10
  • 第三话 她看他的第一眼,便爱上了一袭黑衣的他。 “小姐,你怎么独自一人坐在此处?” 她回过头去,眼里有掩饰不住的...
    玉米年糕阅读 225评论 0 0
  • 悲伤逆流成河,泪如滔滔江水 悲伤的故事攒足了我的泪水 没有欢乐,没有开心,只剩下了悲伤 悲伤大过于欢乐 所有的一切...
    陌上简之阅读 317评论 2 3