两个线性时间解决的算法题


1. 一个数组,我们定义一个主元素,如果在这个数组中有某个元素在此数组中出现的次数超过一半,则称此元素为这个数组的主元素。试想出一种线性时间算法,确定一个数组是否存在主元素,如果存在主元素求出该主元素。

2.一个数组,现在它的元素处于如此的特殊情况,假如该数组中有一对元素互不相等,其他元素都是成对的相等。试想出一种线性时间算法,求出该数组中这对特殊的不相等的元素。



方法一:采用hash,不过这个没有技术含量。空间不知到有多大。

方法二:采用qsort中的partition的方法。


              1.主元素无论怎么分布肯定与排序后第n/2个元素相同,调用partition找到第n/2个元素(logn),然后验证是否为主元素(n).

              2.修改parttion,使分布为 <a =a >a,然后验证<a的所有元素异或,如果为0,则这两个不同的元素在>a中。反之亦然。如果<a所有元素异或,与>a的所有元素异或得到的元素均不为0,则得到的两个元素就是 互不相同的两个元素。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值