返回

剑指LeetCode:前端面试题全攻略(简单题)

前端







**【写在前面】** 

在前端面试中,算法题一直是重中之重。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;
};