Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên đã sắp xếp arr làm đối số duy nhất.
Hàm phải trả về true nếu và chỉ nếu chúng ta có thể chia mảng thành 1 hoặc nhiều dãy con sao cho mỗi dãy con bao gồm các số nguyên liên tiếp và có độ dài ít nhất 3, ngược lại trả về false.
Ví dụ, nếu đầu vào của hàm là:
Đầu vào
const arr = [1, 2, 3, 3, 4, 5];
Đầu ra
const output = true;
Giải thích đầu ra
Chúng ta có thể chia thành hai dãy con liên tiếp:
1, 2, 3 3, 4, 5
Ví dụ
Dưới đây là mã:
const arr = [1, 2, 3, 3, 4, 5]; const canSplit = (arr = []) => { const count = arr.reduce((acc, num) => { acc[num] = (acc[num] || 0) + 1; return acc; }, {}); const needed = {}; for (const num of arr) { if (count[num] <= 0) { continue; } count[num] -= 1; if (needed[num] > 0) { needed[num] -= 1; needed[num + 1] = (needed[num + 1] || 0) + 1; } else if (count[num + 1] > 0 && count[num + 2]) { count[num + 1] -= 1; count[num + 2] -= 1; needed[num + 3] = (needed[num + 3] || 0) + 1; } else { return false; } } return true; }; console.log(canSplit(arr));Đầu ra
true