yy五谷鱼粉 发表于 2019-3-7 20:46:45

众数问题(递归)

众数问题小弟在百度上找的大概核心思想为:中间数与2段数组分别比较。若中<左,即最大众数可能存在左端,将左端再进行2段分割(递归)直到 中 >左为止。右端同理。
好,问题来了,小弟看不懂。{:10_266:}{:10_266:}{:10_266:}
大佬最好能细细讲一下,小弟感激涕淋

暗pluto 发表于 2019-3-8 13:52:05

大概思路就是
先找到中间的数(前提是这些数是经过排序的),然后算出中间的数,并且算出它的重数,也就是它的个数,并且找到左边数和右边数的起始和终止界限
然后用重数与左边的数的个数比,如果重数小,那么左边递归,右边同理
举个例子
122 3333 44566
一共12个排序好的数,中间的数为3,它的重数为4,然后找出左边数的起始和终止界限,得到左边是从0~2,一共三个数
然后进行左边的递归判断,3的重数为4,很明显比左边的数还要大,于是,左边不需要递归(毕竟你个数都比左边的数还要多了,众数不可能在左边)
然后进行右边的递归判断,3的重数为4,右边的数比它大,递归右边(因为不确定右边是不是全部都为同一个数,因此需要递归判断)
思路差不多就是这样

yy五谷鱼粉 发表于 2019-3-8 23:31:47

暗pluto 发表于 2019-3-8 13:52
大概思路就是
先找到中间的数(前提是这些数是经过排序的),然后算出中间的数,并且算出它的重数,也就是 ...

skr~~~天才

暗pluto 发表于 2019-3-9 00:34:07

yy五谷鱼粉 发表于 2019-3-8 23:31
skr~~~天才

方法不止我这一种,比如把排序也放在递归中,这样的化可以减少时间复杂度等
我也只是提供思路而已

yy五谷鱼粉 发表于 2019-3-10 12:46:17

暗pluto 发表于 2019-3-9 00:34
方法不止我这一种,比如把排序也放在递归中,这样的化可以减少时间复杂度等
我也只是提供思路而已

大佬谦虚了
页: [1]
查看完整版本: 众数问题(递归)