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

来源:互联网 发布:先知者软件怎么用 编辑:程序博客网 时间:2024/04/30 11:12


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

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



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

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


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

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

原创粉丝点击