问题:
给定一个整数序列,每个整数出现的次数称为出现的重数,重数最大的整数称为众数,如:
S={1,2,2,2,3,5},1的重数是1,2的重数是3,3的重数是1,5的重数是1,众数是2。请
分治法设计一个程序求解之。
解题思路:
本题的分治体现在将数组分为三部分进行众数的统计:
1.对数组进行排序,推荐使用快速排序算法(此处默认升序)
2.根据分治法思想,分解子问题:
1)计算数组的中位数,将数组分为左右两部分;若左边数组的个数大于中位数的个数,则递归左边数组,同理右边;
2)left记录数组第一个等于中位数的元素位置(即左边数组个数),right记录第一个(从left开始)不等于中位数的元素位置(右边数组个数),记录right-left记录众数的重数。
3)经过多次递归,所求的中位数就是众数。