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