【发布时间】:2020-06-29 11:38:23
【问题描述】:
我有两个数组,例如:
arr1 = [3,3,2,2,1,1];
arr2 = [
[1,1,1,1],
[1,1,1],
[1,1],
[1]
];
我从 arr1 中获取每个值并从 arr2 中转移值(如果可能的话)。
示例: arr1[0] = 3,arr2[0] = [1,1,1,1]。 我从 arr2 移出三个 1;然后移动 arr1[0] 值
结果应如下所示:
arr1 = [3,2,2,1,1];
arr2 = [
[1],
[1,1,1],
[1,1],
[1]
];
这段代码应该在循环中工作,以便在没有 arr1 值或没有 arr2 值时停止循环(贪婪算法的原型)。我尝试在这里使用 .forEach 和 .filter 方法,但它不能正常工作。最好的方法是什么? 我有类似的东西:
arr1.forEach((arr1_value, arr1_index, arr1_arr) => {
arr2.forEach((arr2_value, arr2_index, arr2_arr) => {
if (arr2_value.length >= arr1_value) {
}
});
});
算法解释
arr1 = [3,3,2,2,1,1];
arr2 = [
[1,1,1,1],
[1,1,1],
[1,1],
[1]
];
第 1 步 从 arr2[0] 移出 3 (arr1[0]=3) 个值,然后移入 arr1[0]
结果
arr1 = [3,2,2,1,1];
arr2 = [
[1],
[1,1,1],
[1,1],
[1]
];
第 2 步 从 arr2[1] 移出 3 (arr1[0]=3) 个值,然后移入 arr1[0]
结果
arr1 = [2,2,1,1];
arr2 = [
[1],
[],
[1,1],
[1]
];
第 3 步 从 arr2[2] 移出 2 (arr1[0]=2) 个值,然后移入 arr1[0]
结果
arr1 = [2,1,1];
arr2 = [
[1],
[],
[],
[1]
];
第 4 步 从 arr2[3] 移出 1 (arr1[1]=1) 值,然后移除 arr1[1] 值
结果
arr1 = [2,1];
arr2 = [
[1],
[],
[],
[]
];
第 5 步 从 arr2[0] 移出 1 (arr1[1]=1) 值,然后移除 arr1[1] 值
结果
arr1 = [2];
arr2 = [
[],
[],
[],
[]
];
所以循环在这里停止,因为没有剩下的 arr2 值
【问题讨论】:
-
为什么
arr2[1]仍然是[1,1,1],如果像arr2[0]案例一样从中删除3 个数字?为什么arr1[1]从3变成2? -
请添加最终想要的结果。
-
您希望第二个数组的结果为
[[1],[],[],[1]]?
标签: javascript arrays