问题描述
我在计算机的 IDE 中编写了这段代码,并通过了我能想到的所有测试用例。但是,在 AlgoExpert 和 LeetCode 上对其进行测试后,出现超时错误。我绞尽脑汁想找出我可能错过的任何测试用例,但似乎想不出任何测试用例。我还尝试在 AlgoExpert 中测试他们给我的所有测试用例。希望我没有遗漏任何明显的东西......任何人的提示将不胜感激!
给定 2 个非空整数数组,编写一个函数来确定第二个数组是否是第一个数组的子序列。请注意,数组中的单个数字或数组本身都是数组的有效子序列。
function isValidSubsequence(array,sequence) {
if (sequence.length > array.length) return false;
let s = 0;
let a = 0;
while (s < sequence.length){
if (array[a] === sequence[s]){
s++;
a++
}
else a++;
if (s !== sequence.length - 1 && a === array.length - 1) return false;
}
return true;
}
解决方法
如果序列失败,您的算法最后不会返回。
// running this will freeze your browser
function isValidSubsequence(array,sequence) {
if (sequence.length > array.length) return false;
let s = 0;
let a = 0;
while (s < sequence.length){
if (array[a] === sequence[s]){
s++;
a++
}
else a++;
if (s !== sequence.length - 1 && a === array.length - 1) return false;
}
return true;
}
console.log(isValidSubsequence([1,2,3],[5]));
对于您要执行的操作,您可能需要一个嵌套循环来检查序列是否匹配,从数组中的索引 开始(从 0 开始序列索引):>
function isValidSubsequence(array,sequence) {
let s = 0;
outer:
while (s < array.length){
for (let i = 0; i < sequence.length; i++) {
if (array[s + i] !== sequence[i]){
s++;
continue outer;
}
return true;
}
s++;
}
return false;
}
console.log(isValidSubsequence([1,[5]));
但我认为 .includes
会更容易:
const isValidSubsequence = (array,sequence) => array.join().includes(sequence.join());
console.log(isValidSubsequence([1,[5]));
console.log(isValidSubsequence([1,[2,3]));