返回
没拿到车模但差一点AK
闲谈
2024-01-13 14:42:04
大家好,日拱一卒,我是梁唐。
今天是周一,我们来聊聊昨天上午的LeetCode周赛。
这一次是LeetCode周赛第300场,是由未来汽车赞助的。前1000名都能获得内推的机会,第一名还能获得车模……
首先,来回顾一下题目。
第一题是一道简单题,考察的是数组中元素的频率。
第二题是一道中等题,考察的是字符串的匹配。
第三题是一道困难题,考察的是图的遍历。
第四题是一道困难题,考察的是动态规划。
我前三题都做出来了,第四题卡在了最后一步。
赛后反思了一下,发现自己还是有几个问题:
- 对动态规划的理解还不够深入。
- 做题时容易陷入思维定势。
- 编码能力还有待提高。
针对这些问题,我制定了以下几个改进计划:
- 多刷动态规划的题。
- 多做不同类型的题,开阔思路。
- 多写代码,提高编码能力。
我相信,只要坚持下去,我一定能够拿到车模!
最后,给大家分享一下我的错题。
第一题:
给定一个数组,找出每个元素出现的频率。
我的代码:
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的情况。
通过这次比赛,我发现了自己的不足,也找到了改进的方向。我相信,只要坚持下去,我一定能够有所提高。