出现最频繁的偶数元素

99 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

题目描述

给你一个整数数组 nums ,返回出现最频繁的偶数元素。
如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1 。
来源:力扣(LeetCode)

  • 示例 1
输入:nums = [0,1,2,2,4,4,1]
输出:2
解释:
数组中的偶数元素为 0、2 和 4 ,在这些元素中,2 和 4 出现次数最多。
返回最小的那个,即返回 2 。
  • 示例 2
输入: nums = [4,4,4,9,2,4]
输出: 4
解释: 4 是出现最频繁的偶数元素。
  • 示例 3
输入: nums = [29,47,21,41,13,37,25,7]
输出: -1
解释: 不存在偶数元素。

提示:

  • 1 <= nums.length <= 2000
  • 0 <= nums[i] <= 105

思路分析

根据题意可知,题目给出一个由正整数组成的数组nums,现在需要从里面找出出现次数最频繁的偶数并返回出来;假如有多个满足条件的元素就挑最小的那个元素。若是一个都没有满足,就返回负1。
首先需要计算出所有偶数元素出现的次数,这里需要使用map数据格式来记录所有偶数及它们相对应的出现次数。这里就可以判断map的长度,若是map里面啥都没有,就直接返回负1。若是有就继续往下计算;把map数据格式转为数组格式,数组格式方便操作数据;循环数组,将数组以出现次数进行从大到小排序,取第一个为最大数,循环数组,主要是防止有次数相同的其他偶数,若次数相同判断元素大小,取最小一个即可。

AC代码

function solution(arr) {
  let map = new Map();
  arr.forEach( item => {
    if(item % 2 === 0) {
      let n = map.get(item) || 0;
      map.set(item, n + 1);
	  }
  })
  if(map.size === 0) {
    console.log(-1)
    return -1;
  }
  let newArr = [...map].sort((a, b) => b[1] - a[1]);
  let max = newArr[0][1];
  let num = newArr[0][0];
  for(let item of newArr) {
    if(max === item[1] && item[0] < num) {
      num = item[0];
    }
  }
  console.log(num);
}
let nums = [0,1,2,2,4,4,1];
solution(nums);