Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情
题目描述
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。(出自力扣)
- 示例1
输入: [3,2,3]
输出: 3
- 示例2
输入: [2,2,1,1,1,2,2]
输出: 2
思路分析
从题目中可知多数元素是指数组中出现次数大于 ⌊ n/2 ⌋ 的元素;简单的来说就是谁出现的次数最多,多数元素就是谁。在一个数组里面不能直接判断出谁出现的次数多,所以需要借助对象ojb来计算;循环数组,将数组的元素作为obj的键,出现的次数作为值;若是数组的元素没有在对象里面,则往对象添加键,对应的值改为1,若是数组的元素有出现在对象里面,obj里面对应的值加一;循环结束后再通过obj里面的值对比计算出最大值,此值对应的键就是出现最多次的元素,也就是多数元素。
AC代码
let arr = [2,2,1,1,1,2,2];
function moreNums(arr) {
let obj = {};
let max = 0;
let res = arr;
for(let i = 0; i < arr.length; i++){
if(obj[arr[i]]){
obj[arr[i]]++
}else{
obj[arr[i]] = 1
}
}
for(let key in obj){
if(obj[key] > max) {
max = obj[key]
res = key
}
}
return res
};
let ars = moreNums(arr);
console.log(ars)
总结
这是一个简单的计算字母出现次数算法,主要考察数组和对象,复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。