LeetCode划水
如果世界上有菜鸡,那一定是我
_我走路带风
To save time is to lengthen life.
展开
-
LeetCode 406. Queue Reconstruction by Height (贪心)
题目意思:有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。贪心思路:1、首先确定第一个,首先第一个的 k 必定等于0,可以举反例,k = 1的不可能在第一个(这个很好理解因为k等于1说明前面有一个),所以在 k 等于0找 h 最小的为第一个。2、设立一个标记数组...原创 2019-11-10 00:47:04 · 200 阅读 · 0 评论 -
LeetCode 402. Remove K Digits (贪心)
题目意思:给定一个以字符串表示的非负整数num,移除这个数中的k位数字,使得剩下的数字最小。贪心思路:对于数字的从高到低位每一位都遍历一次,使得最高位在满足条件的情况下尽可能的取到最小,越高位小则整体小。如 "10200"这个字符串,对于第一位想要取最小,"10200"中第二位0满足条件,如果最高位取这个0,只需删掉一个数1,而删除一个数刚好满足我们的条件,所以,第一位可以取...原创 2019-11-09 19:36:36 · 167 阅读 · 0 评论 -
LeetCode 392. Is Subsequence (贪心)
题目意思:有两个字符串 s 和 t,t 比较长,要求从 t 删掉点字符能和 s 对等,如果ok的话返回true,不OK返回fasle贪心思路:因为是简单的级别,所以按照简单的思路去想,两个数组同时遍历,如果两个字符都相等,两个下标都后移,如果不等,t 的下标后移,s 的下标不动。最后根据能否遍历完 s 字符串作为判断条件class Solution {public: ...原创 2019-11-09 18:25:02 · 161 阅读 · 0 评论 -
LeetCode 376. Wiggle Subsequence (贪心)
题目意思:例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,返回子序...原创 2019-11-09 18:08:31 · 132 阅读 · 0 评论 -
LeetCode 321. Create Maximum Number (分治+贪心)
题目意思:给出两个数组,要求在这两个数组中挑出k个数,拼接起来后的数是最大的,并且同个数组的顺序需要维持。解题思路:首先先对其进行分治,我们需要取k个数,那么可以从第一个数组取 i 个贪心思路上拼起来最优的数,再到第二个数组中取 k - i 个拼起来最优的数,然后两个数组在通过贪心策略拼接到一起视为一种情况,遍历所有的 i 的情况,然后最后取最优。贪心的策略在于分别到每个...原创 2019-11-08 19:58:14 · 195 阅读 · 0 评论 -
LeetCode 7. Reverse Integer (翻转整数)
题目意思就是将整数翻转过来很简单就直接上代码:class Solution {public: long long int reverse(int x) { long long xCopy = x; int a[50]; long long result = 0; int flag; if(x &...原创 2019-10-30 20:38:51 · 154 阅读 · 0 评论 -
LeetCode 9. Palindrome Number (判断回文)
题目:判断一个数回不回文,看例子负数不算回文思路:把数翻转过来看看是否对等class Solution {public: bool isPalindrome(int x) { if(x == 0) return true; //小于零肯定不是回文 if(x < 0) return false; //装...原创 2019-10-30 20:32:50 · 121 阅读 · 0 评论 -
LeetCode 2. Add Two Numbers (暴力)
题目描述:暴力解:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publi...原创 2019-10-24 16:09:51 · 113 阅读 · 0 评论 -
LeetCode 8. String to Integer (atoi) (暴力)
题目描述:因为一开始觉得暴力解考虑多点应该能过,然后暴力跪了几次,但是倔起来了,就是想要暴力它,最后也搞出来了,注释在代码里代码:class Solution {public: int myAtoi(string str) { vector<char> lookup {'0', '1', '2', '3', '4', '5',...原创 2019-10-24 15:43:11 · 135 阅读 · 0 评论 -
LeetCode 45. Jump Game II (贪心)
题目描述:每个点的数字代表可以从当前节点跳跃最远的节点数,比如[ 2, 3, 1, 1, 4] 第一个节点跳跃最远位置就是下标为2的第三个元素。求跳到最后一个节点最少需要跳跃多少次?解析:说实话,这题长得就像一个典型的动归,甚至忍不住往动归想。但是俗话说嘛,能用简单的方法解决就用简单的方法解决,所以尝试一下贪心,不过试一下确实是有戏。对吧,首先要用贪心算法先要把定义搬上...原创 2019-09-05 20:07:21 · 160 阅读 · 0 评论 -
LeetCode 32. Longest Valid Parentheses题解(暴力)
题目描述:看到题目也就是找出左右括号能够完美闭合的最长子串,那么首先先不想别的,思考满足条件的子串,应该是左括号的数目等于右括号的数目,那么用一个标记记录左括号数,有左括号加一,右括号减一,然后我们开始一一遍历每种 i - j 的区间里的 i 开头的最长符合串,不需要考虑说 i - j 区间里还可能有子串,因为,i 遍历到后面那些子串也会被涵盖到。代码如下:class Solut...原创 2019-09-02 16:21:45 · 173 阅读 · 0 评论 -
LeetCode 72. Edit Distance (动归)
题目描述:ok,编辑距离大家都比较熟悉了,画个表格基本ok,我个人的构想起点是左上角,从左到右还是从上到下都代表新增和删除,对角线上代表修改对吧,其实很好理解,i-1, j-1已经计算好了那个位置的最短距离,下一个元素可以选择修改等同。那么我们的选择无非就是新增、删除、更改中三选一,给出状态转移公式:dp[i][j] = min((dp[i-1][j] + 1), (dp...原创 2019-09-03 00:55:44 · 157 阅读 · 0 评论 -
LeetCode 70. Climbing Stairs (简单动归)
题目描述:这道题应该属于比较简单的动归了,一眼扫过去差不多能出公式:可以想象当前步只能由上一步和上上步两个途径加起来,dp数组存储到当前步有多少条路那么 i 的子问题就是 i-1 和 i-2dp[i] = dp[i-1] + dp[i-2] if((i-2) >= 0);dp[i] = dp[i-1] if(i == 1)dp[i] = 1 if(i == 0)cl...原创 2019-09-02 23:56:33 · 123 阅读 · 0 评论 -
LeetCode 64. Minimum Path Sum (动归)
题目描述:一看这道题和上一道63题像从一个模板出来的,那它很危险了,我们可以套用上题类似的状态公式,稍作修改就能过了,而且也不用怕它卡,卡的地方都知道了。思路在注释:class Solution {public: int minPathSum(vector<vector<int>>& grid) { //这题怕不是上...原创 2019-09-02 22:05:59 · 89 阅读 · 0 评论 -
LeetCode 63. Unique Paths II (动归)
题目信息:这道题是上一道题的亲兄弟,上道题用数学公式过了,这道题升了个级,加了个障碍物,想了想还是别绕弯了,老老实实动归吧。思路在注释中。class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { /...原创 2019-09-02 21:43:17 · 120 阅读 · 0 评论 -
LeetCode 62. Unique Paths (规律做法)
题目描述:思考了一下,发现其实就两种走法,一个向右一个向下,那,一共要走m+n-2格子也知道了,那其实就是高中数学的填空问题嘛,比如说m+n-2个格子依次排开,我们挑选向下的走法放在哪个格子里,转换为数学公式就是没毛病吧class Solution {public: int uniquePaths(int m, int n) { //如果我没猜错的话...原创 2019-09-02 20:57:31 · 103 阅读 · 0 评论 -
LeetCode 53. Maximum Subarray (动归)
题目描述:(这个送分题,其实就两种情况,你选还是不选,选比不选好就选,不选比选好就不选,我像是在说废话)选的情况是相加,不选的情况就是连续中断,值为自己,那么直接和自己比较就ok了状态公式如下i从1开始的dp[i] = (dp[i-1] + nums[i-1]) > nums[i-1] ? (dp[i-1] + nums[i-1]) : nums[i-1]错误示范:我一开...原创 2019-09-02 20:05:56 · 118 阅读 · 0 评论 -
LeetCode 44. Wildcard Matching (动归)
题目:说明在注释中class Solution {public: bool isMatch(string s, string p) { /* //动态规划 //想办法把转移方程写出来 //先把所有可能情况全部列出来 //d[0][0] = (p[0]=="?"||p[0]=="*"||p[0...原创 2019-09-02 19:17:38 · 112 阅读 · 0 评论 -
LeetCode 55. Jump Game (贪心)
题目描述:这题是上一题(https://blog.csdn.net/qq_36652619/article/details/100565302)的弟弟,每个点的数字代表可以从当前节点跳跃最远的节点数,比如[ 2, 3, 1, 1, 4] 第一个节点跳跃最远位置就是下标为2的第三个元素。求是否能到最后一个节点?解析:这个题比上一篇那个简单,不需要实现最少次数,所以其...原创 2019-09-05 20:42:04 · 177 阅读 · 0 评论 -
LeetCode 122. Best Time to Buy and Sell Stock II (贪心)
题目描述:买卖问题,某一天买入该商品,另外一天卖出去,问最后最大的利润是多少?(注意,下一次买入必须保证上一次买的卖出去了)解析:这是道比较简单的贪心。根据人的第一反应,买卖问题,一个保底的选择就是,要保证卖出去的价格大于买入的价格,这样至少不会亏钱。那是不是就可以打代码了?根据思路:直接买入一个低价的,有大于买入价的就卖出去。为了验证这个思路成不成立,可以举个反例...原创 2019-09-05 21:59:41 · 138 阅读 · 0 评论 -
316. Remove Duplicate Letters (贪心)
题目描述:说是要删除重复的字母,系统只会给小写字母,然后所选的删除策略会使字典序较小的字母尽可能排在前面,比如'a'排在'b'前面。思路:首先一个大体策略:先把当前字符前面的那些字符进行判断,如果当前字符字典序 < 前面字符的字典序,那么如果前面字符在当前字符的后面也出现了,那么可以删除前面的字符。我们这里用一种数据结构会比较好处理——栈具体思路:先用一个int数...原创 2019-09-14 22:32:50 · 174 阅读 · 0 评论 -
LeetCode 135. Candy
题目描述:老师想给孩子们分发糖果,有 N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?分析:分析一下,乍一看好像这个小朋友的糖果之和他旁边的小朋友有关,但是思考一下好像也不大对,旁...原创 2019-09-14 14:15:40 · 171 阅读 · 0 评论 -
LeetCode 134. Gas Station (贪心)
题目描述:有i个加油站gas[i]代表在第i个加油站可以加到的油cost[i]代表从第i个加油站到第i+1个加油站消耗的油题目想问,从下标为几的节点出发,可以完美的绕一圈回到该节点,细节在题目的explanation也有讲。解析:这道题先用贪心算法试试,那就必须要提出贪心策略。凡事都从最简单的思路开始,首先先提出一个思路:每个站点都会加油再耗油,那么会有一个实际...原创 2019-09-06 12:13:38 · 752 阅读 · 0 评论