返回

没拿到车模但差一点AK

闲谈

大家好,日拱一卒,我是梁唐。

今天是周一,我们来聊聊昨天上午的LeetCode周赛。

这一次是LeetCode周赛第300场,是由未来汽车赞助的。前1000名都能获得内推的机会,第一名还能获得车模……

首先,来回顾一下题目。

第一题是一道简单题,考察的是数组中元素的频率。

第二题是一道中等题,考察的是字符串的匹配。

第三题是一道困难题,考察的是图的遍历。

第四题是一道困难题,考察的是动态规划。

我前三题都做出来了,第四题卡在了最后一步。

赛后反思了一下,发现自己还是有几个问题:

  1. 对动态规划的理解还不够深入。
  2. 做题时容易陷入思维定势。
  3. 编码能力还有待提高。

针对这些问题,我制定了以下几个改进计划:

  1. 多刷动态规划的题。
  2. 多做不同类型的题,开阔思路。
  3. 多写代码,提高编码能力。

我相信,只要坚持下去,我一定能够拿到车模!

最后,给大家分享一下我的错题。

第一题:

给定一个数组,找出每个元素出现的频率。

我的代码:

def frequency_of_elements(nums):
  """
  :type nums: List[int]
  :rtype: Dict[int, int]
  """
  freq = {}
  for num in nums:
    if num not in freq:
      freq[num] = 0
    freq[num] += 1
  return freq

我的代码没有考虑到输入的数组可能为空的情况。

第二题:

给定一个字符串,找出它是否与另一个字符串匹配。

我的代码:

def string_matching(s, p):
  """
  :type s: str
  :type p: str
  :rtype: bool
  """
  if len(s) != len(p):
    return False

  for i in range(len(s)):
    if s[i] != p[i] and p[i] != '.':
      return False

  return True

我的代码没有考虑到'.'可以匹配任何字符的情况。

第三题:

给定一个图,找出从一个点到另一个点的最短路径。

我的代码:

def shortest_path(graph, start, end):
  """
  :type graph: Dict[int, List[int]]
  :type start: int
  :type end: int
  :rtype: int
  """
  queue = [(start, 0)]
  visited = set()

  while queue:
    current, distance = queue.pop(0)

    if current == end:
      return distance

    if current in visited:
      continue

    visited.add(current)

    for neighbor in graph[current]:
      queue.append((neighbor, distance + 1))

  return -1

我的代码没有考虑到图中可能存在环的情况。

第四题:

给定一个字符串,找出它的最长回文子序列。

我的代码:

def longest_palindromic_subsequence(s):
  """
  :type s: str
  :rtype: int
  """
  n = len(s)
  dp = [[0] * n for _ in range(n)]

  for i in range(n - 1, -1, -1):
    dp[i][i] = 1

  for l in range(2, n + 1):
    for i in range(n - l + 1):
      j = i + l - 1

      if s[i] == s[j] and l == 2:
        dp[i][j] = 2
      elif s[i] == s[j]:
        dp[i][j] = dp[i + 1][j - 1] + 2
      else:
        dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])

  return dp[0][n - 1]

我的代码没有考虑边界情况,即字符串为空或长度为1的情况。

通过这次比赛,我发现了自己的不足,也找到了改进的方向。我相信,只要坚持下去,我一定能够有所提高。