JavaScript 中组成最大频率的最小可能长度


问题

我们需要编写一个 JavaScript 函数,该函数将数组 arr(作为第一个也是唯一参数)作为输入。

我们的函数应该找到一个数组 arr 的连续子数组中最小的 possible 长度,该长度具有所有数组元素中最大频率相同。

例如,如果该函数的输入为

输入

const arr = [55, 77, 77, 88, 55];

输出

const output = 2;

输出解释

输入数组的最大频率为 2,因为元素 55 和 77 都出现了两次。

在具有最大频率的子数组中,最短长度为 2。所以,我们返回 2。

示例

以下为代码 −

 实时演示

const arr = [55, 77, 77, 88, 55];
const shortestLength = (arr) => {
   let freq = 0
   let len = Infinity
   arr.reduce((acc, num, index) => {
      if (acc[num] !== undefined) {
         acc[num].freq += 1
         acc[num].range[1] = index
      } else {
         acc[num] = {
            freq: 0,
            range: [index, index],
         }
      }
      if (acc[num].freq > freq) {
         freq = acc[num].freq
         len = acc[num].range[1] - acc[num].range[0] + 1
      } else if (acc[num].freq === freq) {
         len = Math.min(
            len,
            acc[num].range[1] - acc[num].range[0] + 1,
         )
      }
      return acc
   }, {})
   return len
};
console.log(shortestLength(arr));

输出

2

更新于:2022 年 6 月 27 日

115 次观看

开启你的 职业

完成课程取得认证

开始学习
广告