2019独角兽企业重金招聘Python工程师标准>>>

寻找主元素的3种算法

定义:如果一个元素的出现次数超过了数组长度的一半,这个元素就叫做主元素

寻找主元素 的算法有3种。
第一种,编程之美上的,O(n)的,没什么好说的。

第二种,如果我们将数组排序,排序以后,中间的那个数,一定是主元素。也就是说,数组的中位数就是主元素。
寻找数组里的第k大,有O(n)的算法。

第三种,分治法。
分治是递归的一种思路,先假定子问题可以解决,然后物尽其用,尽最大努力利用子问题的答案来解决原问题。
假设数组a的长度是n,令m=n/2,那么,考虑它的两个子问题:寻找a[1..m],和a[m+1..n]的主元素。
假设我们已经知道了这两个子问题的答案了,就是k和p,然后我们现在要解决原问题。
考虑一下,子问题的答案跟原问题的答案有些什么关系呢?
其中一个关系就是,原数组的主元素,必定是k或者p。你看,子问题的解和原问题的解产生了联系了!
有了这个结论,我们就可以,把整个a扫描一次,看看k和p出现的次数哪一个大,大的那一个,就是a的主元素了。
复杂度为 T(n) = 2 * T(n/2) + O(n) 也就是O(nlogn)

转载于:https://my.oschina.net/mustang/blog/85993

【分治】寻找主元素的3种算法相关推荐

  1. 主元素问题(随机算法)

    算法设计例题:主元素(随机算法) memory limit: 5000KB    time limit: 1000MS accept: 1    submit: 5 Description 设T[1: ...

  2. 关于随机输出数组中所有元素的三种算法

    算法一:比较常见,也比较容易想到.缺点:如果arrA中有重复元素,那么重复的元素只会输出一次. int[] arrA={1,2,3,4,5,6}; int[] arrB=new int[arrA.le ...

  3. 求栈中元素个数算法_Algorithm 大家都会的去除有序数组中重复元素的三种算法...

    问题描述 给定一个有序数组,要删除数组重复出现的元素,使得每个元素之出现一次,然后返回移除重复数组后的新长度: 示例: 给定数组 nums = [1,2,4,4],删除重复出现的元素后,原数组变成 n ...

  4. 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

    1.蒙特卡罗算法 基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...

  5. 主元素问题—蒙特卡罗算法

    蒙特卡罗(Monte Carlo)方法介绍 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实 ...

  6. 主元素问题(蒙特卡洛法和分治法)

    主元素问题描述 设T为一个有n个元素的数组,当T中某个元素x的个数大于n/2时,称x为T的主元素. 蒙特卡洛算法简介 蒙特卡洛算法(Monte Carlo),是一种不确定性化算法,并无法保证一定能够得 ...

  7. 分治与递归 | 5:主元素问题的三种解法

    问题:设T[0:n-1]是n个元素的数组.对任一元素x, 设S(x)={ i | T[ i ] = x }.当|S(x)|>n/2时, 称x为主元素. 设计一个线性时间算法, 确定T[0:n-1 ...

  8. 算法 寻找多数元素

    寻找多数元素 一.问题描述: 令A[1.....n]是一个整数序列,A中的整数a如果在A中出现的次数多于[n/2]次,那么a就称为多数元素.例如在序列1,3,2,3,3,4,3中,3是多数元素,应为7 ...

  9. 寻找多数元素(主元素)

    问题: 有整型数组a[1-n],如果整数x在数组a中出现的次数多于半数,则x称为多数元素. 初级方法: 计算每一个元素出现的次数,算法复杂度O(NlogN) 可以寻找中间值元素,因为多数元素在序列中必 ...

  10. 数据结构实验 寻找数组主元素(2013考研题)

    题目 [问题描述] 已知一个整数序列A长度为N其中若存在a且a的个数大于N/2则称为A的主元素 例如0 5 5 3 5 7 5 5 则为主元素 5 又如0 5 5 3 5 1 5 7则中没有主元素. ...

最新文章

  1. javascript 函数默认参数 只适用于 ES6
  2. 解决Hbase启动报错问题:No such file or directory!
  3. 前序遍历与中序遍历确定后序遍历
  4. JVM源码分析之安全点safepoint
  5. 大数据分析:Java 下降,华为平均月薪高达 35K,分析 89 万招聘数据有这些发现!
  6. [Android]Activity启动过程
  7. java+cache使用方法_java相关:springboot使用GuavaCache做简单缓存处理的方法
  8. SpringBoot(入门)
  9. Apache Struts 1宣告退出舞台
  10. c++:ISO C++ forbids declaration of ‘xxx’ with no type
  11. python删除过期文件_python 删除过期文件的方法+源码
  12. 十个3D 游戏引擎,html h5 js
  13. regester正则用法_Regester-Regester(正则表达式测试器)下载 v2.0.1官方版-下载啦
  14. web服务器主机头文件,在Win2k下建立虚拟Web主机
  15. Apache POI 之 初学实战篇 (四) --- 文本对齐
  16. OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标
  17. 蚂蚁金服mPaaS 3.0发布 助力客户智能化构建超级App生态
  18. 【excel】隔行引用另一表中连续数据
  19. Android ADB原理及常用命令
  20. ArrayList常见练习题解析

热门文章

  1. echrts多条折线
  2. Mysql update 语句(chm文档)
  3. PAT (Advanced Level) Practice 1001 A+B Format (20分)
  4. JDK打印的疑问:CUPSPrinter有何用处?
  5. 为socket的recv/send设置超时
  6. frok的一个Demo测试素数
  7. C++ 时间差的计算方式
  8. js手机键盘遮挡_移动端页面input输入框被键盘遮挡问题
  9. 计算机网络 组网设计 论文,计算机网络组网毕业设计(校园局域网设计毕业论文)...
  10. 中考配额是什么意思_@所有家长!这些中考政策,你应该提前了解↘