O(n),线性筛,大致思路就是我们在考虑删除两个不同的数字的时候,实际上可以同过计数来实现,而不是真正的删除。 在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1。如果下一个数字和我们之前保存的数字不同,则次数减1。如果次数为零,我们需要保存下一个数字,并把次数设为1。由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字。
求出一堆数中出现次数超过一半的数字
原创
©著作权归作者所有:来自51CTO博客作者Nemaleswang的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
记一次JVM堆外内存泄漏问题
一次由JVM堆外内存泄漏引发的POD重启问题的解决之路。
JVM 内存泄漏 堆外内存 POD重启 -
出现次数超过一半的数
(3)每次删除两个不同的树 (4)记录两个值。时间复杂度是O(n) 代码如下:#include
数组 时间复杂度 #include