leetcode刷题小记0424
2023-11-23 14:01:46
每天刷一道 LeetCode,见证自己编程能力的飞跃
刷题之旅日记 0424
大家好,我是 [你的名字],今天是我每天刷一道 LeetCode 的第 424 天。在这个半放假的悠闲状态下,我抽出时间写下这篇小记,记录下我刷题的思路和心得,希望能够对同样热衷于刷题的小伙伴们有所帮助。
第一题:两数之和
题目: 给定两个整数 a
和 b
,求它们的和。
我的第一思路: 直接相加即可。
更优的解法: 使用位运算可以更快地求和。
def add(a, b):
while b != 0:
carry = a & b
a = a ^ b
b = carry << 1
return a
第二题:两数相除
题目: 给定两个整数 a
和 b
,求 a
除以 b
的结果。
我的第一思路: 直接相除即可。
更优的解法: 使用位运算可以更快地求商。
def divide(a, b):
if b == 0:
return 0
sign = 1
if a < 0:
sign = -1
a = -a
if b < 0:
sign = -sign
b = -b
quotient = 0
while a >= b:
shift = 0
while a >= (b << shift):
shift += 1
quotient += 1 << (shift - 1)
a -= b << (shift - 1)
return sign * quotient
第三题:最长公共子序列
题目: 给定两个字符串 a
和 b
,求它们的最长公共子序列。
我的第一思路: 使用动态规划求解。
更优的解法: 使用后缀树求解。
class SuffixTree:
def __init__(self):
self.root = {}
def insert(self, word):
node = self.root
for char in word:
if char not in node:
node[char] = {}
node = node[char]
def search(self, word):
node = self.root
for char in word:
if char not in node:
return False
node = node[char]
return True
def lcs(self, word1, word2):
self.insert(word1)
lcs = ""
for char in word2:
if self.search(char):
lcs += char
return lcs
总结
通过今天的刷题,我不仅巩固了以前学过的算法和数据结构,还学到了很多新的知识。刷题是一个很好的提高编程能力的方法,因为它能让我遇到各种各样的问题,并迫使我思考解决办法。我相信只要坚持每天刷一道 LeetCode,我的编程能力一定能得到很大的提升。
常见问题解答
-
刷题有什么好处?
刷题可以提高你的编程能力,让你学到新的算法和数据结构,并让你对编程语言有更深入的理解。
-
每天刷一道题会不会太少了?
每天刷一道题虽然不多,但贵在坚持。只要你坚持每天刷题,你的编程能力就会逐渐提高。
-
我刷题遇到了困难怎么办?
遇到困难不要气馁,可以上网搜索或者求助于其他小伙伴。也可以先把题目放一放,等过段时间再回来看,说不定就会有新的思路。
-
刷题会不会让我失去兴趣?
刷题不会让你失去兴趣,只要你选择适合自己的题目,并坚持每天刷题。你可以从简单的题目开始刷,然后逐渐增加难度。
-
刷题可以让我找到工作吗?
刷题并不能保证你一定能找到工作,但它可以提高你的编程能力,让你在面试中更有竞争力。