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

Kiểm tra có thể chia mảng thành các dãy con liên tiếp trong JavaScript

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