cs

这里的众数的定义是:出现一半以上的元素。(严格大于一半)

img

由于找到候选者之后要遍历一遍检查是否真的是众数,所以只需考虑 A 真的有众数的情况。

减除前缀,众数 m 与其它元素的数量之差要么不变,要么不减。所以,m 一定是 A - P 里的众数,从而可以减治。

代码见./majEleCandidate.cpp

若将众数的标准从“一半以上”改作“至少一半”,算法需做什么调整?

不需要调整,majEleCandidate()还是可以选出候选者,检查的逻辑改一改就行。