Chúng ta được cung cấp một mảng các số nguyên riêng biệt, giả sử arr và một mảng mảng số nguyên khác, giả sử sourceArr.
Trong mảng sourceArr, các số nguyên là khác biệt. Chúng ta nên viết một hàm tạo thành arr bằng cách nối các mảng trong sourceArr theo thứ tự bất kỳ.
Tuy nhiên, chúng ta không thể sắp xếp lại thứ tự các số nguyên bên trong bất kỳ mảng con nào trong soureArr. Chúng ta nên trả về true nếu có thể tạo mảng arr từ sourceArr, ngược lại là false.
Ví dụ -
const arr = [23, 67, 789]; const sourceArr = [[23], [789, 67]];
Hàm phải trả về false bởi vì chúng ta không thể sắp xếp lại thứ tự các phần tử bên trong một mảng con và nếu không có nó, chúng ta không thể đạt được arr mục tiêu.
Ví dụ
const arr1 = [23, 67, 789]; const arr2 = [23, 789, 67]; const sourceArr = [[23], [789, 67]]; const validFormation = (arr, sourceArr) => { const indexes = new Array(100); let arrIndex = 0; let index; for (let i = 0; i < sourceArr.length; ++i) { indexes[sourceArr[i][0]] = i; } while (arrIndex < arr.length) { index = indexes[arr[arrIndex]]; if (index === undefined) return false; for (let j = 0; j < sourceArr[index].length; ++j) { if (arr[arrIndex] !== sourceArr[index][j]) return false; ++arrIndex; } } return true; }; console.log(validFormation(arr1, sourceArr)); console.log(validFormation(arr2, sourceArr));
Đầu ra
Điều này sẽ tạo ra kết quả sau -
false true