多数元素

132 阅读1分钟

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)

总结

这是一个简单的计算字母出现次数算法,主要考察数组和对象,复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。