Computer >> Máy Tính >  >> Lập trình >> Javascript

Có thể chia mảng thành các chuỗi con liên tiếp trong JavaScript

Vấn đề

Chúng tôi bắt buộc phải viết một hàm JavaScript lấy một mảng các số nguyên được sắp xếp, arr, làm đối số đầu tiên và duy nhất.

Hàm của chúng ta sẽ trả về true nếu và chỉ khi 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 là 3, ngược lại là 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 chúng thành hai chuỗi con liên tiếp -

1, 2, 3
3, 4, 5

Ví dụ

Sau đâ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