เราได้รับอาร์เรย์ของจำนวนเต็มที่แตกต่างกัน สมมติว่า arr และอีกอาร์เรย์หนึ่งของอาร์เรย์จำนวนเต็ม สมมติว่า sourceArr ในอาร์เรย์ sourceArr จำนวนเต็มแตกต่างกัน เราควรเขียนฟังก์ชันที่สร้าง arr โดยการต่ออาร์เรย์ใน sourceArr ในลำดับใดก็ได้ อย่างไรก็ตาม เราไม่สามารถจัดเรียงใหม่จำนวนเต็มภายในซับอาร์เรย์ใน sourceArr ได้ เราควรคืนค่า true หากสามารถสร้างอาร์เรย์ arr จาก sourceArr ได้ false ถ้าไม่ได้
เช่น:
const arr = [23, 67, 789]; const sourceArr = [[23], [789, 67]];
ฟังก์ชันควรคืนค่า false เพราะเราไม่สามารถจัดเรียงใหม่สมาชิกภายในซับอาร์เรย์ และโดยไม่มีการจัดเรียงใหม่ เราไม่สามารถบรรลุ arr เป้าหมายได้
ตัวอย่าง
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));
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ดังนี้:
false true