Leetcode 2021年3月 每日一题汇总(分析+多语言代码)

本文总结了3月LeetCode每日一题,涵盖动态规划、单调栈、回溯DFS等重点题型,通过实例解析和推荐题目帮助提升算法技能。从动态规划的Russian Doll Envelopes到链表与指针的Reverse LinkedList II,适合进一步巩固和挑战。
摘要由CSDN通过智能技术生成

传送门

Leetcode

Github代码(主Python,大部分也有C++和Java)

一. 题型汇总

类别日期
动态规划 (DP)1,2,3,4,7,8,17
位运算3,22,29
数据结构(重点是栈)5,6,9,10,11,12,20,23,28
单调栈6,24
回溯DFS7,31
哈希13,14
(路径)模拟15,16,19
原地操作21
链表与指针18,27
递归25,26
二分法30

二. 重点题型推荐&介绍

2.1 动态规划

动态规划需要注意最重要的两点:

  1. 理清楚数组要存什么内容。
  2. 理清楚转移公式,即如何用之前的信息快速得到下一个位置的信息。

推荐题目:

Hard题,难点在于如何预处理以及构建转移公式。

Normal题:难点在于如何利用动态规划加速回溯DFS查找。

Hard题,难点在于如何构建转移公式

Hard题,难点在于如何确定动态规划数组存储什么信息。

2.2 单调栈

单调栈最重要的一点是:如何维护栈的单调性并利用栈的信息。

推荐题目:

Normal题,难点在于如何决定元素的出入栈规则。

Normal题,难点在于如何决定维护哪种元素,并制定出入栈规则。

2.3 回溯DFS

回溯DFS是有模板可套的:(以Python为例)

res = []  # 最终答案
path = []  # 每次的可行解

def backtrack(未探索区域, res, path):
    if path 满足条件:
        res.add(path) # 深度拷贝
        # return  # 如果不用继续搜索需要 return
    for 选择 in 未探索区域当前可能的选择:
        if 当前选择符合要求:
            path.add(当前选择)
            backtrack(新的未探索区域, res, path)
            path.pop()

作者:fuxuemingzhu
链接:https://leetcode-cn.com/problems/subsets-ii/solution/hui-su-fa-mo-ban-tao-lu-jian-hua-xie-fa-y4evs/

推荐题目:

Normal题,难点在于动态规划,是一道很好的混合题。

Normal题,难点在于去除重复可行解。

2.4 链表与指针

链表与指针提醒一定要记住一点:能用变量代替最好用变量代替,否则诸如node.next.next.next之类的会绕晕自己。

推荐题目:

Normal题,难点在于边界条件。

Normal题,难点在于如何快速确定切割点。

三.结语

本月的Leetcode练习总体来说难度中等,只有少数几道题比较难想出思路,也有几道题混合了多种题型,比如3号的题目是DP+位运算,7号的是回溯DFS+DP,这些题都比较有挑战性,大家可以多加练习。

四.自我推销

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值