Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Độ dài nhỏ nhất của mảng con có tần suất lớn nhất bằng JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một mảng số arr làm đối số duy nhất.

Hàm phải tìm độ dài nhỏ nhất có thể của một mảng con (liên tiếp) của mảng arr, mà có cùng tần suất lớn nhất của bất kỳ phần tử nào như 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ả 55 và 77 đều xuất hiện hai lần.

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

Ví dụ

Dưới đâ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