《啊哈!算法》第九章 理解与感悟

这可能是缘分吧,看到这一章的时候也收到了第一家公司的面试通知,很忐忑,希望能有好运气(祈祷)。
这一个非常难!完全没有想出来,可耻的去百度了!
解法是:
声明一个变量count = 0,声明一个常量size等于数组大小。
假设该数组的第一个元素a(1)为主元素,让其与a(2)进行比较,若相同,则使变量count+1,若不同,则count-1。然后继续比较a(3)。以此类推。

当与a(n)比较后,count = -1时,将count重新归为0,并重新假设a(n+1)为主元素,并继续与a(n+2)作比较。

当count>=(size-m)/2时,此时假设的主元素a(m)即为实际的主元素。
或遍历完整个数组后,当前假设的主元素为实际主元素。
来源:https://www.douban.com/note/505717075/
这个解法为什么成立呢,这就和啊哈磊大神说的序列特性相关了,去掉两个不同的数,在原序列中出现次数大于50%的数,在新序列中依然大于50%。换主元素的过程就是去掉不同数的数对的过程,当某个数大于当前序列长度的一半或者他作为最终主元素时(这就表明他的数量不足以被删光,肯定大于一半啦),则找到主元素。
算法复杂度最大为O(n)

这一本书的笔记(?不是本来打算就记录代码吗)就到此结束了!很多有趣简洁的算法~下一个算法世界见☺
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值