数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例 1:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:
输入:[3,2]
输出:-1
示例 3:
输入:[2,2,1,1,1,2,2]
输出:2
说明:
- 你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?
我的算法实现:
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
// 数组的长度
const len = nums.length
// 保存主要元素的界限
const limitCount = Math.floor(len / 2)
// 将元素的值转换成 map ,其中 key 为对应的值, value 为出现个数
const numsObj = {}
for (let i = 0; i < len; i++) {
const num = nums[i]
numsObj[num] = (numsObj[num] || 0) + 1
// 如果增加达到了界限,那么就直接返回这个值
if (numsObj[num] > limitCount) {
return num
}
}
return -1
};
这个算法主要是使用了 map 的方式,思路也比较清晰,就是记录相同元素的个数,并实时查看当前元素出现的个数,如果发现有超过的,就直接返回,这样不要想着有多种情况,超过半数以上元素有且仅有一个。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-majority-element-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。