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

Kiểm tra có thể tạo mảng đích từ mảng nguồn trong JavaScript


Cho mảng số nguyên phân biệt arr, và mảng các mảng số nguyên sourceArr. Trong sourceArr, các số nguyên phân biệt. Cần viết hàm tạo arr bằng cách nối các mảng trong sourceArr theo bất kỳ thứ tự nào.

Tuy nhiên, không thể sắp xếp lại số bên trong mảng con của sourceArr. Trả về true nếu có thể tạo arr từ sourceArr, false ngược lại.

Ví dụ:

const arr = [23, 67, 789]; 
const sourceArr = [[23], [789, 67]];

Hàm trả về false vì không thể sắp xếp lại phần tử trong mảng con và không đạ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));

Kết quả

Điều này sẽ tạo ra đầu ra sau:

false true