能否通过源数组来形成目标数组 JavaScript


给定一个不同整数数组,假设为 arr,以及另一个整数数组,假设为 sourceArr。

在 sourceArr 数组中,整数不同。我们应编写一个函数,该函数通过以任意顺序连接 sourceArr 中的数组来形成 arr。

但是,我们不能重新排序 sourceArr 中任何子数组内的整数。我们应该返回 true(如果可以从 sourceArr 中形成数组 arr)或返回 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

更新时间:25-11-2020

155 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告