Computer >> Máy Tính >  >> Lập trình >> Javascript

Độ dài nhỏ nhất có thể tạo thành tần suất lớn nhất trong JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng số, arr, làm đối số đầu tiên và duy nhất.

Hàm của chúng ta phải tìm độ dài nhỏ nhất có thể của một mảng con (liền kề) của mảng arr, có cùng tần số lớn nhất của bất kỳ phần tử nào với toàn bộ mảng.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

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

Đầu ra

const output = 2;

Giải thích đầu ra

Mảng đầu vào có tần suất lớn nhất cho bất kỳ phần tử nào là 2 vì cả hai phần tử 55 và 77 đều xuất hiện hai lần.

Trong số các mảng con có tần suất lớn nhất trên toàn mảng, độ dài ngắn nhất là 2. Vì vậy, chúng tôi trả về 2.

Ví dụ

Sau đây là mã -

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));

Đầu ra

2