Facebook 的一个 JavaScript 面试问题
哇,真是精彩的一周!上周的挑战非常成功。如果你错过了,这里是上周文章的链接,以及Coderbyte上的挑战。
在我开始讨论挑战的解决方案之前,我还想告诉大家,Coderbyte 非常期待您的反馈!您是否刚刚参加了技术面试,想了解一下面试表现?请将您面试时遇到的问题和答案发送至liz.gross@coderbyte.com,我会尽快回复您的解决方案。期待您的反馈!
现在,不用多说,以下是解决这个谷歌面试问题的常用方法:
堆栈方法:
当我第一次听到这个问题时,我立刻想到了使用栈。栈是一种基本的数据结构,元素的插入和删除都在栈顶进行。通常,栈上可以执行三种基本操作:
- 将一个元素插入堆栈(
push
) - 从堆栈中删除一个项目(
pop
从顶部) - 显示堆栈的内容
在 JavaScript 中,实现堆栈就像使用数组及其方法一样简单push
。pop
对于我们的问题来说,这是一种绝佳的数据结构选择。当你迭代按键时,你可以将push
它们放入堆栈中。一旦你按下退格键,pop
堆栈顶部的数据就会被移除!代码如下:
function removeBackspaces(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === '-B' && result.length > 0) {
result.pop();
} else if (arr[i] !== '-B') {
result.push(arr[i]);
}
}
return result;
}
function checkEqualInputs(arr) {
const [arr1, arr2] = arr.map((e) => e.split(','))
const result1 = removeBackspaces(arr1);
const result2 = removeBackspaces(arr2);
// check if arrays are equal
return result1.join('') === result2.join('');
}
大O:
这是一个很好的解决方案,因为它在时间和空间方面相对便宜。时间和空间的运行时复杂度为 ,O(n+m)
其中n
是第一个字符串的长度,m
是第二个字符串的长度。您只需遍历每个字符串一次,并存储最多包含每个字符串长度的堆栈。
本周的挑战:
本周,我们将解决 Facebook 真机面试中出现的一道编程题。请在下方评论区分享你的答案!更多 Facebook 相关挑战,敬请关注Coderbyte 上的Facebook 面试问答课程!
编写一个函数,接收一个 DOM 元素,并在几毫秒distance
内将其从当前位置平滑地动画到右侧像素位置duration
。实现以下函数:animate(el, milliseconds, distance)
例如,animate(document.querySelector('#myDiv'), 2000, 100)
将在 2 秒内将 id 为 100px 的元素myDiv
向右移动。无需使用 jQuery 或任何其他第三方库即可实现此功能。
迫不及待想看看你们的作品。祝大家编程愉快!
我们的时事通讯📫
每次发布重大功能时,我们都会发布一小段功能揭秘,以便我们的社区能够第一时间获悉我们的新动态。请在此处提供您的电子邮件地址,我们会将您添加到“第一时间知晓”列表中 :)
文章来源:https://dev.to/coderbyte/a-javascript-interview-question-asked-at-facebook-27po