面试题 17.10. 主要元素
作者:互联网
题意理解:给定数组,找出数组中出现次数大于n/2的元素。n是数组长度。
一种方法,时间复杂度nlogn。思路是先排序,然后遍历。看每个元素和跨过n/2后的这一元素值是否相等。相等则返回当前元素。遍历完成如果不相等返回-1。只需要遍历前面n/2个元素就可以。
map思路:数组不长,存入map计数。空间和时间都是n
新思路:摩尔投票算法。讲解视频网址:https://www.bilibili.com/video/av59092107/
讲解视频:https://www.bilibili.com/video/BV1f4411D76n
根本原因是:出现次数大于一半的元素,消耗的速度更慢。m和n-m(m>n-m)同时减1,n-m先减到0。剩下的是m(出现次数大于一半的元素)。
想法和写法。
写法:
candidate和count,count大于0还要再进行一次遍历,判断candidate出现的次数是不是大于n/2。
标签:面试题,遍历,元素,www,17.10,次数,数组,大于 来源: https://www.cnblogs.com/zlh-1024powr/p/14508250.html