我写了一个解决方案,它允许我从第一个数组中得到一个索引数组,这个数组是两个排序数组的索引的交集,我想知道为什么这个解决方案是错误的。当我检查它时,我从第一个数组中得到了正确的索引数组,但面试官告诉我这是错误的。
***非常感谢您的帮助和解释。***我还没有商业经验。很抱歉在英语方面有一些错误,因为我来自乌克兰,我正在提高这门语言。
// first example of input:
// const arr1 = [1, 2, 2, 2];
// const arr2 = [1, 1, 2, 2];
// second example of input:
const arr1 = [1, 2, 2, 3, 4, 5, 6, 7, 9, 9, 20];
const arr2 = [1, 2, 3, 3, 5, 8, 9, 9, 21];
// first example of output:
// - [0, 1, 2]
// - [0, 1, 3]
// - [0, 2, 3]
// second example of output:
// - [0, 1, 3, 5, 8, 9]
// - [0, 2, 3, 5, 8, 9]
//function compareItemsFn, length1, length2 - from conditions to this task
const compareItemsFn = (index1, index2) => {
switch (true) {
case arr1[index1] === arr2[index2]: return 0;
case arr1[index1] < arr2[index2]: return -1;
case arr1[index1] > arr2[index2]: return 1;
default: return undefined;
}
};
const length1 = arr1.length;
const length2 = arr2.length;
// function intersectionIndexes - my solution
function intersectionIndexes(compareItemsFn, length1, length2) {
let indexesIntersectionArray = [];
let i = 0;
let j = 0;
while (i < length1 && j < length2) {
if (compareItemsFn (i, j) === 0) {
indexesIntersectionArray.push(i);
i++;
j++;
} else if (compareItemsFn (i, j) === 1) {
j++;
} else {
i++;
}
}
return indexesIntersectionArray;
};
const result = intersectionIndexes(compareItemsFn, length1, length2);
1条答案
按热度按时间gmxoilav1#
如果你确信你的解决方案有效,那么也许它并不是错误的,因为它给出了错误的答案,而是因为你解决问题的方式。
下面的代码简化了你的解决方案。它将两个数组作为参数,而不是它们的
length
属性值,这样解决方案就不会绑定到全局变量arr1
和arr2
。你应该总是倾向于实现泛化的解决方案。标准库中的Math.sign()方法代替了
compareItemsFn
函数,有时在面试中,你可能会被要求实现标准库中的功能,面试官希望看到的是你是否意识到这一点。