力扣刷题记录(2023.10.17)斗鱼直播怎么关闭延迟
本文目录导读:
我决定开始系统地刷力扣题目,以提高自己的编程能力和算法思维,这是我第一次系统性地进行刷题练习,希望通过这个过程,能够逐步掌握各种算法和编程技巧。
刷题背景
力扣(LeetCode)是一个非常流行的算法练习平台,提供了大量的编程题目,按难度排序,适合不同水平的程序员练习和提升,我选择力扣作为练习平台,主要是因为它的题目质量高,而且每个题目都有详细的题解和讨论区,方便我学习和交流。 标 标是逐步完成力扣上的所有题目,从简单题开始,逐步挑战中等题和困难题,我计划在接下来的3个月内完成以下目标:
- 完成所有简单题:简单题通常涉及基础的数据结构和算法,掌握这些是进一步学习的基础。
- 完成所有中等题:中等题难度稍高,需要对基础算法有深入的理解和应用能力。
- 完成所有困难题:困难题难度较大,需要综合运用多种算法和数据结构,同时注重代码的优化和效率。
刷题计划
为了高效地完成刷题任务,我制定了以下计划:
- 每日刷题量:每天至少完成1-2道题目,确保每天都有进步。
- 分类刷题:按照简单题、中等题、困难题分类刷题,逐步提升。
- 定期复习:每周进行一次总结和复习,巩固之前学习的知识点。
- 记录错题:将做错的题目整理到错题本中,定期复习,避免重复犯错。
刷题过程
第一天:简单题练习
我选择了力扣上的第一道简单题——“两数之和”,这道题要求在一个整数数组中找到两个数,使得它们的和等于目标值,我决定先自己思考,再参考题解。 描述**:给定一个整数数组 nums 和一个目标值 target,请返回两个数的索引,使得它们的和等于 target,你可以假设每个输入只存在一个解。
思考过程:
- 理解题目:我需要找到两个不同的元素,它们的和等于 target,并且返回的是这两个元素的索引。
- 初步想法:可以使用哈希表来存储已经遍历过的元素,然后对于每个元素,检查 target 减去当前元素是否在哈希表中,如果是,就找到了两个数。
- 实现细节:需要注意索引的顺序,以及避免重复索引。
代码实现:
def twoSum(nums, target): hash_map = {} for i, num in enumerate(nums): complement = target - num if complement in hash_map: return [hash_map[complement], i] hash_map[num] = i return []
题解分析:
力扣的题解中,这道题的解法非常经典,使用哈希表的时间复杂度为 O(n),空间复杂度为 O(n),我的实现与题解一致,说明我对哈希表的应用理解正确。
第二天:中等题练习
我选择了力扣上的中等题——“反转字符串”,这道题要求将一个字符串的字符顺序反转。 描述**:给定一个字符串,反转它的字符顺序。
思考过程:
- 理解题目:反转字符串意味着将最后一个字符放到第一个位置,依此类推。
- 初步想法:可以使用切片操作,或者手动交换字符。
- 实现细节:需要考虑字符串的长度为奇数和偶数的情况,以及空字符串的情况。
代码实现:
def reverseString(s): return s[::-1]
题解分析:
力扣的题解中,这道题有多种解法,包括使用切片、手动反转字符等,我的实现非常简洁,但可能在处理空字符串或单字符字符串时需要考虑边界情况。
第三天:困难题练习
我选择了力扣上的困难题——“最长有效括号”,这道题要求找到一个字符串中最长的连续有效括号的长度。 描述*:给定一个字符串,包含 '(', ')' 和 '','*' 可以被视为 '(' 或 ')',请找到最长的连续有效括号的长度。
思考过程:
- 理解题目:有效括号需要满足匹配的条件,而 '*' 可以灵活匹配,增加了题目的复杂性。
- 初步想法:可以使用动态规划的方法,记录每个位置的最长有效括号长度。
- 实现细节:需要考虑 '*' 的两种情况,即作为 '(' 或 ')'。
代码实现:
def longestValidParentheses(s): dp = [0] * len(s) max_length = 0 for i in range(1, len(s)): if s[i] == ')': if s[i-1] == '(' or s[i-1] == '*': dp[i] = dp[i-2] + 1 if dp[i] > max_length: max_length = dp[i] elif s[i-1] == ')': dp[i] = 0 return max_length
题解分析:
力扣的题解中,这道题的解法非常巧妙,使用动态规划的方法,通过记录每个位置的最长有效括号长度,从而高效地解决问题,我的实现与题解思路一致,但可能在处理 '*' 的情况时需要更仔细。
通过今天的刷题练习,我深刻体会到刷题的重要性,也认识到自己在编程和算法方面的不足之处,以下是我今天的收获和总结:
- 理解题目:在刷题时,首先要仔细阅读题目描述,明确问题要求,避免理解错误。
- 选择合适的算法:根据题目的难度和要求,选择合适的算法和数据结构,使用哈希表解决两数之和问题,使用动态规划解决最长有效括号问题。
- 注意边界情况:在编程实现时,要特别注意边界情况,例如空字符串、单字符字符串、全是括号的字符串等。
- 优化代码:在实现过程中,尽量优化代码的效率和空间复杂度,避免不必要的计算和存储。
我将继续坚持每天刷题,逐步提高自己的编程能力和算法思维,我相信,通过不断的练习和总结,我能够掌握更多的算法和编程技巧,为将来的职业发展打下坚实的基础。
接下来的计划:
- 完成所有简单题:接下来的3个月,我将专注于完成力扣上的所有简单题,确保基础扎实。
- 逐步挑战中等题和困难题:在掌握简单题的基础上,逐步攻克中等题和困难题,提升自己的算法水平。
- 定期复习和总结:每周进行一次总结和复习,巩固之前学习的知识点,避免遗忘。
- 记录错题和优秀题解:将做错的题目和优秀的题解整理到错题本和优秀题解本中,定期复习和学习。
希望通过这个刷题计划,我能够在力扣上取得优异的成绩,同时提升自己的编程能力和算法思维,为未来的职业发展做好准备。
力扣刷题记录(2023.10.17)斗鱼直播怎么关闭延迟,
发表评论