找出数组重复次数最多的元素

描述:

给定一个字符串数组, 每一个元素代表一个 IP 地址,找到出现频率最高的 IP。

注:给定数据只有一个频率最高的 IP

样例:

lines = ['192.168.1.1', '192.118.2.1', '192.168.1.1'];
return '192.168.1.1';
1
2

题目分析:

说了一堆,其实就是找出数组重复次数最多的元素

思路:

用对象来处理,将元素赋值到属性上,判断之前有没有这个属性。

数组去重

虽然对象属性同样可以用来做数组去重,但是会将 number,NaN,undefined,null,变为字符串形式,因为对象的属性名就是一个字符串

代码:

/**
 * @param ipLines: ip  address
 * @return: return highestFrequency ip address
 */
const highestFrequency = function(ipLines) {
  var [obj, max, name] = [{}, 1, ''];
  ipLines.forEach(value => {
    if (obj[value]) {
      // 已经有值了 就把值+1
      obj[value]++;
      if (obj[value] > max) { // 判断重复次数有没有超过当前最高的
        max = obj[value]; // 重复次数
        name = value; // 当前元素
      }
    } else {
      // 没有值 就初始化一个值
      obj[value] = 1;
    }
  });
  return name;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Last Updated: 9/19/2018, 8:38:16 PM