leetcode_medium_300-400
文章目录
【注意】最后更新于 June 10, 2020,文中内容可能已过时,请谨慎使用。
开始日期 | 更新日期 | 备注 |
---|---|---|
2020-6-10 | 2020-6-10 | 300-400中等难度总结 |
题目汇总
-
- 查找和最小的K对数字
- 合并K个排序链表
- 寻找两个有序数组的中位数
- K个有序数组的中位数
- m个有序数组求第k小的数字
- 有序矩阵中第K小的元素
- [375] 猜数字大小 II
-
- 搜索二维矩阵 II
373. 查找和最小的K对数字
一、题目信息
今天来做这个题目,主要考察的xxx
二、思路描述
能说出基本思想即可,实在不行动手画个流程图把。
三、算法描述
算法是问题求解过程的一种描述,有清晰的操作步骤。
四、参考代码
放轻松,虽然是c++实现,我们一贯宗旨是拒绝奇技淫巧,不懂代码一看就明白
五、举一反三
别人最佳答案并不重要,关键是自己理解。 https://leetcode-cn.com/problems/find-k-pairs-with-smallest-sums/solution/cha-zhao-he-zui-xiao-de-kdui-shu-zi-by-lenn123/ https://leetcode.com/problems/find-k-pairs-with-smallest-sums/discuss/84551/simple-Java-O(KlogK)-solution-with-explanation
[375] 猜数字大小 II
一、题目信息
今天来做这个题目,主要考察的xxx
- 链接:guess-number-higher-or-lower-ii
- 来源:Interview Question
- 难度:中等
二、题目描述
算法是问题求解过程的一种描述,看看这个题目是怎么描述的吧。
|
|
三、算法描述
能说出基本思想即可,实在不行动手画个流程图把。
- Solution1 题目看起来很简单,但是无从下手。 n是模糊数据。 最差就是(1+n)n/2 顺猜,优化一下平衡二叉搜索tree,但是 结果如何计算呢?
画外音:在此阅读题目要求,自己理解题目了吗?对不明白地方,我跳过了吗?
给定 n ≥ 1,计算你至少需要拥有多少现金才能确保你能赢得这个游戏 <—> 需要考虑最坏情况下的代价。也就是说要算每次都猜错的情况下的总体最大开销。
四、参考代码
放轻松,虽然是c++实现,我们一贯宗旨是拒绝奇技淫巧,不懂代码一看就明白
五、举一反三
别人最佳答案并不重要,关键是自己理解。 https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-375-guess-number-higher-or-lower-ii/
[377] 组合总和 Ⅳ
一、题目信息
这个是一个经典题目,
-
第一次实现用递归回溯,参考组合排序,区别 不需要判断历史记录是否访问,虽然做了剪彩。结果超时、
-
第二次实现,根据当target=1000时候,很多重复,采用vectordp(target+1,-1)) ,map<int,int>dp 虽然dp节省空间,但是依然耗时增加了
-
第三次实现,动态规划。和递归相比,递归是中间结果 防止过度计算。 动态规划是vectordp(target+1,0)),每个节点从小到大计算一次。 变化公式target-array[i]
-
总结,动态规划是每个target都要计算一次。 每个target如何计算和回溯一样,target-array[i]。 这样一比较 时间复杂度是降低的,但是递归浪费更多空间。
二、题目描述
算法是问题求解过程的一种描述,看看这个题目是怎么描述的吧。
给出一个都是正整数的数组 nums,其中没有重复的数。从中找出所有的和为 target 的组合个数 ~~~ nums = [1, 2, 3] target = 4
所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combination-sum-iv 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ~~~
三、算法描述
能说出基本思想即可,实在不行动手画个流程图把。
- Solution1 递归回溯–当n过大时超时
循环条件是:target 大于0
- Solution2 从小到大的动态规划 循环条件是:遍历target。
I=1
1+2 1+3 1+1
四、参考代码
放轻松,虽然是c++实现,我们一贯宗旨是拒绝奇技淫巧,不懂代码一看就明白
|
|
五、举一反三
别人最佳答案并不重要,关键是自己理解。
378. 有序矩阵中第K小的元素
一、题目信息
今天来做这个题目,主要有3个思路,二分查找,虽然巧妙,但是理解不了,我没有做出来。
二、题目描述
算法是问题求解过程的一种描述,看看这个题目是怎么描述的吧。
二、题目描述
算法是问题求解过程的一种描述,看看这个题目是怎么描述的吧。
三、算法描述
能说出基本思想即可,实在不行动手画个流程图把。
- 空间 O(n),时间Klg(n)
由于优先队列使用堆实现,可保证队列头是最小值
设矩阵有n行,这队列中有n个元素,每个元素都来自其中一行。初始化时,将每行的第0列压入
每次取出一个元素,根据元素是哪一行的,再将其所在行的下一个元素加入
执行k次出队列操作,即可得到结果
队列中每个元素为pair<int,pair<int,int»,外层pair的int表示矩阵中的值,内层pair的first表示第几行,内层pair的second表示该行的第几列
四、参考代码
放轻松,虽然是c++实现,我们一贯宗旨是拒绝奇技淫巧,不懂代码一看就明白
|
|
五、举一反三
别人最佳答案并不重要,关键是自己理解。