Skip to content

力扣2

约 1066 字大约 4 分钟

2026-02-24

排序后只比较第一个和最后一个字符串,因为默认按字典排序,它们的差异最大只需要比较它们即可,会有额外的空间开销,也可以手动对比,但性能开销更大

function longestCommonPrefix(strs: string[]): string {
  if (strs.length == 0) return ''
  if (strs.length == 1) return strs[0]

  let i = 0
  strs.sort()
  const start = strs[0]
  const end = strs[strs.length - 1]

  for (; i < start.length && start[i] == end[i]; i++) { }
  return strs[0].slice(0, i)
};

226. 翻转二叉树 - 力扣(LeetCode)

function invertTree(root: TreeNode | null): TreeNode | null {
  if (!root) return null
  invertTree(root.left)
  invertTree(root.right)
  const temp = root.left
  root.left = root.right
  root.right = temp

  return root
};

1556. 千位分隔数 - 力扣(LeetCode)

function thousandSeparator(n: number): string {
  const temp = String(n)
  let res = ''
  for (let i = temp.length; i > 0; i -= 3) {
    const str = temp.slice(i - 3 < 0 ? 0 : i - 3, i)
    res = str + '.' + res
  }
  return res.slice(0, res.length - 1)
};

62. 不同路径 - 力扣(LeetCode)

直接深搜时间过长会超时 需要使用二维动态规划,每一格的路径个数等于它左边一格和上边一个路径个数之和

function uniquePaths(m: number, n: number): number {
  const dp = []
  for (let i = 0; i < m; ++i) {
    dp.push(new Array(n).fill(1))
  }
  for (let i = 1; i < m; ++i) {
    for (let j = 1; j < n; ++j) {
      dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
    }
  }
  return dp[m - 1][n - 1]
};

283. 移动零 - 力扣(LeetCode)

function moveZeroes(nums: number[]): void {
  for (let i = 0; i < nums.length; ++i) {
    if (nums[i] === 0) {
      for (let j = i + 1; j < nums.length; ++j) {
        if (nums[j] !== 0) {
          nums[i] = nums[j]
          nums[j] = 0
          break
        }
      }
    }
  }
};

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

先利用深搜遍历节点,存储下根节点到p和q的路径,接着遍历两个数组,相同就记录,不同就跳出

103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

层序遍历,适时反转

2. 两数相加 - 力扣(LeetCode)

209. 长度最小的子数组 - 力扣(LeetCode)

滑动窗口

function minSubArrayLen(target: number, nums: number[]): number {
  let res = nums.length + 1, sum = 0, left = 0, right = 0
  for (; right < nums.length; ++right) {
    sum += nums[right]
    while (sum >= target) {
      res = Math.min(res, right - left + 1)
      sum -= nums[left]
      ++left
    }
  }
  return res === nums.length + 1 ? 0 : res
};

394. 字符串解码 - 力扣(LeetCode)

单调栈

101. 对称二叉树 - 力扣(LeetCode)

层序遍历判断

155. 最小栈 - 力扣(LeetCode)

两个栈,第一个栈正常存储元素,第二个栈存储第一个栈每一位对应最小的元素,如:stack1=[-3,0,-2] stack2=[-3,-2,-2]

199. 二叉树的右视图 - 力扣(LeetCode)

将二叉树层序遍历后取每一层(数组)最右(后)的值

贡献者

PinkDopeyBug

公告

本博客内容原本使用obsidian编写,由于没有仔细配置,以至图片引用使用obsidian风格。

且图片存储路径频繁变更导致部分文章图片无法正常显示。

为您带来不便请谅解。

ps:贡献者一直都只有wynnsimon一人,显示Pink的贡献者是因为我没好好配置git。后面因为懒就没一个个修改。如果被提及的人不希望被显示可以联系我我会立即删除。