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 và trả về độ dài của một mảng con mà chênh lệch giữa giá trị lớn nhất và nhỏ nhất của nó bằng chính xác 1.
Ví dụ, nếu đầu vào là:
const arr = [2, 4, 3, 3, 6, 3, 4, 8];
Thì đầu ra sẽ là:
const output = 5;
Giải thích kết quả
Vì mảng con mong muốn là [4, 3, 3, 3, 4].
Ví dụ
Dưới đây là mã thực hiện:
const arr = [2, 4, 3, 3, 6, 3, 4, 8];
const longestSequence = (arr = []) => {
const map = arr.reduce((acc, num) => {
acc[num] = (acc[num] || 0) + 1;
return acc;
}, {});
return Object.keys(map).reduce((max, key) => {
const nextKey = parseInt(key, 10) + 1;
if (map[nextKey] >= 0) {
return Math.max(max, map[key] + map[nextKey]);
}
return max;
}, 0);
};
console.log(longestSequence(arr));
Kết quả
Đầu ra trên console:
5