我今天在与一位同事进行过交谈,这位同事刚刚对一位潜在员工(未获得报价)进行了白板考试,这让我怀疑我是否可以解决入门级潜在客户的这一问题。
我不能。
问题是...将两个排序后的数组合并为一个数组。
arrayOne = ['a', 'b', 'c', ...'z']
arrayTwo = [1, 2, 3, 4, 5, ...100]
result = [1, 'a', 2, 'b', ...26, 'z', 27, 28, ...100]
这里的想法是
a = 1
b = 2
c = 3
...
z = 26
我环顾四周,无法找到简单的解决方案。请记住,我们主要使用JavaScript,但是潜在员工可以使用他们在面试中选择的任何语言。
我尝试失败的借口:
function merge_arrays(arr1, arr2) {
let result = [];
let i1 = 0;
let i2 = 0;
for (var i = 0; i < arr1.length + arr2.length; i++) {
if (arr1[i1] > arr2[i2]) {
result.push(arr2[i2]);
i2 += 1;
} else {
result.push(arr1[i1]);
i1 += 1;
}
}
return result;
}
array1 = ["a", "b", "c", "d", "e"];
array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
// returns ["a", "b", "c", "d", "e", undefined, undefined, ...undefined]
在这种情况下,您不能仅获取下一个索引并假定它在正确的位置。
array1 = ["a", "c", "d", "e"];
array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
// should return ["a", 1, 2, "c", 3, "d", 4, ...13]
答案 0 :(得分:0)
TypeScript中的解决方案是:
tabBarView
可以添加一个if来检查应该先添加哪个,但是由于未指定,因此添加起来似乎很冗长。
答案 1 :(得分:0)
类似的事情应该起作用,它只会迭代两个数组,并且仅在新的“合并”数组存在时将它们添加到元素中(如果0
或''
可以,则可能要检查null或未定义的元素在场)。
function merge(a1, a2) {
const merged = Array(a1.length + a2.length);
let index = 0, i1 = 0, i2 = 0;
while (i1 < a1.length || i2 < a2.length) {
if (a1[i1] && a2[i2]) {
const item1 = a1[i1];
const item2 = a2[i2].charCodeAt(0)-96;
merged[index++] = (item1 < item2) ? a1[i1++] : a2[i2++]
}
else if (a1[i1]) merged[index++] = a1[i1++];
else if (a2[i2]) merged[index++] = a2[i2++];
}
return merged;
}
// Array with characters always passed as 2nd array
const array1 = [1, 2, 3, 4, 5, 6];
const array2 = ['a', 'c', 'd', 'e'];
const result = merge(array1, array2);
console.log(result)