返回
剑指LeetCode:前端面试题全攻略(简单题)
前端
2023-09-09 10:34:10
**【写在前面】**
在前端面试中,算法题一直是重中之重。LeetCode作为全球最大的算法题库之一,其精选题集更是受到了各大互联网公司的青睐。本文精选了LeetCode精选TOP面试题中的150道前端面试题,涵盖简单题、中等题和困难题,并对每道题提供详细的解题思路和代码示例,帮助前端工程师们高效备战面试,提升算法能力。
**【简单题】**
**1. 两数之和**
给定一个整数数组nums和一个目标值target,请找到两个非重叠整数,其和等于target。
```javascript
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
const twoSum = (nums, target) => {
const map = {};
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (map[complement] !== undefined) {
return [map[complement], i];
}
map[nums[i]] = i;
}
return [];
};
2. 无重复字符的最长子串
给定一个字符串s,请找到其中最长不包含重复字符的子串。
/**
* @param {string} s
* @return {number}
*/
const lengthOfLongestSubstring = (s) => {
let maxLen = 0;
let left = 0;
const map = {};
for (let right = 0; right < s.length; right++) {
const char = s[right];
if (map[char] !== undefined && map[char] >= left) {
left = map[char] + 1;
}
map[char] = right;
maxLen = Math.max(maxLen, right - left + 1);
}
return maxLen;
};
3. 最长公共前缀
给定一个字符串数组strs,请找到它们最长公共前缀。
/**
* @param {string[]} strs
* @return {string}
*/
const longestCommonPrefix = (strs) => {
if (strs.length === 0) {
return "";
}
let minLen = strs[0].length;
for (let i = 1; i < strs.length; i++) {
minLen = Math.min(minLen, strs[i].length);
}
let commonPrefix = "";
for (let i = 0; i < minLen; i++) {
const char = strs[0][i];
for (let j = 1; j < strs.length; j++) {
if (strs[j][i] !== char) {
return commonPrefix;
}
}
commonPrefix += char;
}
return commonPrefix;
};
4. 旋转图像
给定一个n x n的二维数组matrix,请将它顺时针旋转90度。
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
const rotate = (matrix) => {
const n = matrix.length;
for (let i = 0; i < n / 2; i++) {
for (let j = i; j < n - i - 1; j++) {
const temp = matrix[i][j];
matrix[i][j] = matrix[n - j - 1][i];
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
matrix[j][n - i - 1] = temp;
}
}
};
5. 最长回文子串
给定一个字符串s,请找到其中的最长回文子串。
/**
* @param {string} s
* @return {string}
*/
const longestPalindrome = (s) => {
if (s.length === 0) {
return "";
}
let maxLen = 1;
let start = 0;
let end = 0;
for (let i = 0; i < s.length; i++) {
const oddLen = expandAroundCenter(s, i, i);
const evenLen = expandAroundCenter(s, i, i + 1);
const currentMaxLen = Math.max(oddLen, evenLen);
if (currentMaxLen > maxLen) {
maxLen = currentMaxLen;
start = i - (currentMaxLen - 1) / 2;
end = i + (currentMaxLen / 2);
}
}
return s.substring(start, end + 1);
};
const expandAroundCenter = (s, left, right) => {
while (left >= 0 && right < s.length && s[left] === s[right]) {
left--;
right++;
}
return right - left - 1;
};