leetcode困难题精练笔记

祖玛游戏
做菜式:手上有资源,可以放到目标集合的不同位置,用回溯法。(第一层遍历资源,第二层遍历位置,失败回溯)

互质树
树DFS的基本性质,针对数据范围预处理

统计异或值在范围内的数对有多少
组CP:从数据集合中确定有多少对满足要求,计数(满足同一个性质的元素可能有多个),配对

统计异或值在范围内的数对有多少
区间转化成差,数字转化成二进制,利用trie树进行匹配

好子数组的最大分数
两个因素决定了分数,数组长度,和数组的最小值。
有两个维度遍历所有可能的候选答案。
a.遍历长度,记录最小值,计算结果。同样的最小值可能对应多个区间长度,但实际上只要考虑最长的区间长度。

b.遍历所有可能的最小值,固定最小值的情况下,不断增加区间长度。避免方法a中重复计算相同最小值。
关于最大值和最小值特性的一些思考
当元素集合规模扩大时,最大值或者最小值可能保持不变,如果发生改变,新的最大值最小值的一定是新加入的元素。
当元素集合规模减少时,最大值或者最小值可能保持不变,如果发生改变,新的最大值最小值需要重新判断。

矩形区域不超过 K 的最大数值和
二维数据的处理方式有两种:
a.二维的dp,矩形的面积等于其它矩形的拼凑
b.固定两边,转化为一维数据处理

变为棋盘
二维数组的分析:
行(列)分析
注意二进制的特点:只有两种状态。

停在原地的方案数
数位成本和为目标值的最大数字
说实话,这两道题应该算是中等类型的题目,考的是单一的知识点(动态规划)
约束+当前状态->下一状态

地图分析
最短的桥
题目本身不难,AC代码也很容易写出来。不过利用超级源点的想法值得学习。
多源最短路转化为单源最短路

最大人工岛
编程要注意不要把思维定格在某些元素上,要有全局观,全民借兵,人人都有可能。
入手的元素一定是可描述可判断可处理的。
题目说填海,那就考虑每一个海(因为判断不出哪个海在贡献结果上有优先级)
思路:并查集将所有陆地分类,遍历每个海,看是否能将相邻的陆地链接起来。

完美矩形
二维排序(利用元素的两个维度进行排序)
可以类比在坐标矩阵中遍历点,先看X值最小的,如果有x值相同,那么按照y值从大到小的顺序遍历

水壶问题
状态+有限的操作方向 +目标结果 = 回溯

使字符串平衡的最少删除次数
建模,描述问题永远是第一步,思考所有候选集,关键性质:数量

直方图的水量
化整为零,求每个坐标的储水量

困于环中的机器人
注意出现周期的点

链接词
trie树用来检索单词是否存在,实际性能和hashset是一个数量级,尝试将一些特殊的元素从
搜索集合中剔除,进行单独处理,使得剩下的元素集合具有统一的形式。可以为数组添加一个
虚拟的索引为-1的位置,对应DP[0].便于初始值的DP。

分配重复整数
完成所有工作的最短时间
每个人戴不同帽子的方案数
一定注意数据量小的元素
一个客户只可以拿一种数字,一个数字可以分配个多个用户。枚举每个用户的数字情况。
都是匹配型任务
客户配数字
工人陪工作
都是回溯+剪枝 (难点就是如何剪枝)

人分配帽子,状态压缩DP,要遍历所有的mask

覆盖
二维数组的位置可以通过编码转化为一维,状态压缩。

使数组严格递增
注意严格使用贪心算法,如果xxxxx操作不能明显优于其它,则要枚举所有可能。

求和路径
理解树递归的过程,尝试所有可能性(候选集)

超级洗衣机
逐个击破,从第一个洗衣机开始思考,清零需要多少操作?
操作后对后续的洗衣机清零有什么影响?

一个图中连通三元组的最小度数
理解题意,暴力搜哈,简洁代码,注意度。

计算右侧小于当前元素的个数
基本思路从右向左遍历是对的,如何通过数据结构来快速找到比自己小的元素个数是关键(树状树)
精通桶排序

与数组中元素的最大异或值
数值最大:高位决定性,先判断最高位能否满足,二进制的最大1,最小0. 十进制最大9,最小0
trie树和hashset的使用比较:如果想要匹配的字符串(字母串,数字串)是确定的两者都可以用,如果需要根据前面子串
的匹配情况决定后续子串的匹配操作,使用trie树。
从数组中挑选与target异或最大的值 ->直接思路是遍历,统计结果
换种思路,异或最大的值应该满足什么条件?数组中是否存在满足条件的元素呢?
这样思考的话:遍历转化为查找。这是很常见的思路。

不同的循环子字符串
注意学习滚动哈希的思想

最大数
排序类问题,转化为待排序元素之间的优先级,考虑传递性。

丑数 II
还是回归到思考所有候选集以及所有可能性上。(利用分类,优先级)
1-> 12 13 15
1,2 -> 1
3 15 22 23 25 相比于第一轮新加入的元素一定比原来大(除了来自上一轮的2)

圆形靶内的最大飞镖数量
标准化(通过点约束圆的范围),等效(相同点数的圆都是满足条件)。找到某个包含最多点的圆形。可能能包含同样多点数的圆形包含不止一个。

最大加号标志
目标问题不能直接DP,但是决定目标问题的因素可以DP。

安装栅栏
时钟方向最近,向量,凸包。向量的叉积可以判断两个向量之间是顺时针还是逆时针。

连续数列
归并排序,解决子问题,排序子问题,利用子问题结论解决父问题。

找出第 k 小的距离对
计数问题,减少重复步骤。无序的空间进行两两组合搜索,O(n^2),利用大小的传递性,NlogN排序后处理可以优化检索
周期,单调,传递

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值