返回

leetcode刷题小记0424

闲谈

每天刷一道 LeetCode,见证自己编程能力的飞跃

刷题之旅日记 0424

大家好,我是 [你的名字],今天是我每天刷一道 LeetCode 的第 424 天。在这个半放假的悠闲状态下,我抽出时间写下这篇小记,记录下我刷题的思路和心得,希望能够对同样热衷于刷题的小伙伴们有所帮助。

第一题:两数之和

题目: 给定两个整数 ab,求它们的和。

我的第一思路: 直接相加即可。

更优的解法: 使用位运算可以更快地求和。

def add(a, b):
    while b != 0:
        carry = a & b
        a = a ^ b
        b = carry << 1
    return a

第二题:两数相除

题目: 给定两个整数 ab,求 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

第三题:最长公共子序列

题目: 给定两个字符串 ab,求它们的最长公共子序列。

我的第一思路: 使用动态规划求解。

更优的解法: 使用后缀树求解。

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,我的编程能力一定能得到很大的提升。

常见问题解答

  1. 刷题有什么好处?

    刷题可以提高你的编程能力,让你学到新的算法和数据结构,并让你对编程语言有更深入的理解。

  2. 每天刷一道题会不会太少了?

    每天刷一道题虽然不多,但贵在坚持。只要你坚持每天刷题,你的编程能力就会逐渐提高。

  3. 我刷题遇到了困难怎么办?

    遇到困难不要气馁,可以上网搜索或者求助于其他小伙伴。也可以先把题目放一放,等过段时间再回来看,说不定就会有新的思路。

  4. 刷题会不会让我失去兴趣?

    刷题不会让你失去兴趣,只要你选择适合自己的题目,并坚持每天刷题。你可以从简单的题目开始刷,然后逐渐增加难度。

  5. 刷题可以让我找到工作吗?

    刷题并不能保证你一定能找到工作,但它可以提高你的编程能力,让你在面试中更有竞争力。