刷题总结
picobird丶
这个作者很懒,什么都没留下…
展开
-
leetcode 1167题 使用贪心的算法设计思路
题目描述为了装修新房,你需要加工一些长度为正整数的棒材 sticks。如果要将长度分别为 X 和 Y 的两根棒材连接在一起,你需要支付 X + Y 的费用。 由于施工需要,你必须将所有棒材连接成一根。返回你把所有棒材 sticks 连成一根所需要的最低费用。注意你可以任意选择棒材连接的顺序。示例 1:输入:sticks = [2,4,3]输出:14解释:先将 2 和 3 连接成 5,花费 5;再将 5 和 4 连接成 9;总花费为 14。示例 2:输入:sticks = [1,8,3,5]原创 2020-08-18 14:40:41 · 241 阅读 · 0 评论 -
HashMap在寻找回文串中的使用
336. 回文对首先想出蛮力算法所谓蛮力算法,就是枚举每一个字符串,然后判断他们加起来是不是一个回文。这个方法的代码如下,我看题解里有人说在别的语言中使用蛮力算法是可以通过的,但是C++中使用蛮力算法就会超时,但是通过蛮力算法来启发思路还是蛮不错的。时间复杂度O(n^2 * m), m为字符串平均长度class Solution {public: //蛮力算法 vector<vector<int>> palindromePairs(vect原创 2020-08-06 12:15:48 · 147 阅读 · 0 评论 -
DFS和BFS在拓扑排序中的使用
进行练习的题目是207. 课程表, 210. 课程表 II什么是拓扑排序呢?给定一个包含n个节点有向图G,所谓拓扑排序就是给出它的节点编号的一种排序。在排序中需要满足,对于G中任何一条有向边(u, v),u在排序中都出现在v的前面。简而言之,如果G中有环,那就不存在拓扑排序,同时,拓扑排序也不止一种形式。使用DFS思路:对于一个节点,如果它的相邻节点都被访问完成,则回溯到它的时候,它也被访问完成,并将其放入ans。由递归的特性可以知道,此时,在这个点之前的点都已经在ans中了,也就..原创 2020-08-04 14:44:43 · 334 阅读 · 0 评论 -
LeetCode 大数加法
在计算的过程中,int不能帮助我们解决所有的计算问题,就比如说很长的数据的计算。使用字符串,同时结合基本的运算逻辑可以解决这个问题。比如这道题[415. 字符串相加]使用如下解法。class Solution{public: string addStrings(string num1, string num2) { int num1Length(num1.size() - 1), num2Length(num2.size() - 1); bool out(fa..原创 2020-08-03 12:29:22 · 1161 阅读 · 0 评论 -
寻找最小矩形
在看到题的时候,先看看数据的范围n <= 4:任何时间复杂度的算法都可以用n <= 1000: 需要考虑O(n^2) / O(n^2logn)的算法才可以n <= 50000:需要考虑O(nlogn) O(nlog^2n), O(n)的算法首先想到蛮力算法底是从lo到hi的,那么底为hi - lo + 1高就是lo到hi之间最低的高度因此我们枚举每一个底边,计算出高,并找到最大的面积思路:枚举每一个底边,再在这个范围里面找到高时间复杂度O(n^3)具体代码.原创 2020-07-31 23:14:18 · 442 阅读 · 0 评论