斩获前端面试官的芳心!LeetCode轻松搞定150道面试题——简单题(下)
2023-09-09 08:14:32
各位前端开发工程师们,你们还在为如何应对前端面试而发愁吗?不用担心,LeetCode 将为您提供帮助!本文精选了 LeetCode 上最常见的 150 道前端面试题,涵盖了简单题、中等题和困难题三个难度级别。本文将重点介绍简单题(下),提供详细的解题思路和代码示例,帮助您轻松应对前端面试。
LeetCode 是一个非常流行的在线算法学习和刷题平台,它提供了大量的算法题和详细的解题思路。如果您想提高自己的算法能力,LeetCode 是一个非常好的选择。
本文精选的 150 道前端面试题,都是由资深的前端工程师精心挑选出来的。这些题目涵盖了前端开发的各个方面,包括 JavaScript、HTML、CSS、算法和数据结构。如果您能掌握这些题目,那么您在前端面试中一定会脱颖而出。
45. 136. 只出现一次的数字
题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现一次的元素。
解题思路:
可以使用异或运算来解决这个问题。异或运算的性质是,相同的数字异或为 0,不同的数字异或为 1。因此,我们可以将数组中的所有数字异或一遍,得到的结果就是那个只出现一次的数字。
代码示例:
function singleNumber(nums) {
let result = 0;
for (let i = 0; i < nums.length; i++) {
result ^= nums[i];
}
return result;
}
46. 169. 多数元素
题目:
给定一个大小为 n 的数组,找到出现次数超过 n/2 的元素。
解题思路:
可以使用摩尔投票法来解决这个问题。摩尔投票法的基本思想是,在数组中,如果某个元素出现次数超过 n/2,那么它一定出现在数组的前半部分和后半部分。因此,我们可以先将数组分成两半,然后在每一半中找到出现次数最多的元素。最后,如果这两个元素相等,那么它就是出现次数超过 n/2 的元素。
代码示例:
function majorityElement(nums) {
let candidate = null;
let count = 0;
for (let i = 0; i < nums.length; i++) {
if (count === 0) {
candidate = nums[i];
count = 1;
} else if (candidate === nums[i]) {
count++;
} else {
count--;
}
}
return candidate;
}
47. 206. 反转链表
题目:
反转一个单链表。
解题思路:
可以使用迭代或递归的方式来反转链表。迭代的方式是,从链表的头部开始,依次将每个节点的 next 指针指向它的前一个节点。递归的方式是,将链表的头部节点指向它的下一个节点,然后递归地反转剩下的链表。
代码示例(迭代):
function reverseList(head) {
let prev = null;
let current = head;
while (current) {
let next = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
代码示例(递归):
function reverseList(head) {
if (!head || !head.next) {
return head;
}
let newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
48. 268. 丢失的数字
题目描述:
给定一个包含 0, 1, 2, ..., n 的数组,找到丢失的数字。
解题思路:
可以使用异或运算来解决这个问题。异或运算的性质是,相同的数字异或为 0,不同的数字异或为 1。因此,我们可以将数组中的所有数字异或一遍,然后将结果与 n 异或一遍,得到的结果就是丢失的数字。
代码示例:
function missingNumber(nums) {
let result = nums.length;
for (let i = 0; i < nums.length; i++) {
result ^= nums[i];
result ^= i;
}
return result;
}
49. 283. 移动零
题目描述:
给定一个数组,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
解题思路:
可以使用双指针法来解决这个问题。双指针法的基本思想是,使用两个指针来遍历数组,一个指针指向当前的元素,另一个指针指向第一个遇到的 0。当当前指针指向一个非零元素时,将其与第一个遇到的 0 交换,然后将第一个遇到的 0 指针后移。
代码示例:
function moveZeroes(nums) {
let j = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
nums[j] = nums[i];
j++;
}
}
for (let i = j; i < nums.length; i++) {
nums[i] = 0;
}
}
50. 344. 反转字符串
题目描述:
编写一个函数,反转字符串中的字符顺序。
解题思路:
可以使用双指针法来解决这个问题。双指针法的基本思想是,使用两个指针来遍历字符串,一个指针指向字符串的头部,另一个指针指向字符串的尾部。然后,将这两个指针指向的字符交换,并同时向中间移动。
代码示例:
function reverseString(s) {
let left = 0;
let right = s.length - 1;
while (left < right) {
let temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
51. 349. 两个数组的交集
题目描述:
给定两个数组,找出它们的交集。
解题思路:
可以使用哈希表来解决这个问题。哈希表的