
算法刻意练习-LeetCode实战
Jone.D
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法刻意练习-LeetCode实战30-通配符匹配(C++)——完结篇
题目:通配符匹配原题链接:通配符匹配这道题与之前的一道LeetCode中使用递归解决的题目类似:正则表达式匹配这里也贴上我对这道题的解答:算法刻意练习-LeetCode实战18-正则表达式匹配(C++)照着思维惯性,我就想用递归来解答,但是总是有错,无法AC,代码与错误案例放下面,就当纪念,以后万一哪天回来看看说不定想起来怎么做了(有大佬看出来错在哪里的话欢迎指正):class So...原创 2020-03-30 18:13:20 · 290 阅读 · 0 评论 -
算法刻意练习-LeetCode实战29-加油站(C++)
题目:加油站原题链接:加油站为了实现循环查找的操作,在开始进行查找之前将两个数组(gas,cost)进行了原数组拼接(就是把数组复制一遍,放到原数组后面)。然后依次判断即可,代码如下:class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& co...原创 2020-03-29 08:39:53 · 232 阅读 · 0 评论 -
算法刻意练习-LeetCode实战28-跳跃游戏(C++)
题目:跳跃游戏原题链接:跳跃游戏这道题刚开始自己做时出了点错,无法AC,于是看了解答,发现下面这种解答极为精妙。每次更新当前节点能够到达的最远距离,如果当前节点到达的最远距离小于当前节点的偏移量,那么就判断不能到达。代码如下:class Solution {public: bool canJump(vector<int>& nums) { in...原创 2020-03-28 07:50:05 · 267 阅读 · 0 评论 -
算法刻意练习-LeetCode实战27-分发饼干(C++)
题目:分发饼干原题链接:分发饼干一道简单的贪心,代码如下:class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { int lg = g.size(), ls = s.size(); sort(g.begi...原创 2020-03-27 10:00:12 · 322 阅读 · 0 评论 -
算法刻意练习-LeetCode实战26-判断子序列(C++)
题目:判断子序列原题链接:判断子序列刚一开始,觉得用暴力也才O(n^2),想先试一下能不能过,谁知道果然过不了。代码如下:class Solution {public: bool isSubsequence(string s, string t) { int ls = s.size(), lt = t.size(); if(ls == 0 &...原创 2020-03-26 08:51:27 · 210 阅读 · 0 评论 -
算法刻意练习-LeetCode实战25-买卖股票的最佳时机II(C++)
题目:买卖股票的最佳时机II原题链接:买卖股票的最佳时机II这是一个比较简单的贪心算法,判断买卖股票的动作如下:买股票:今天不是最后一天&&今天的股票价格低于明天&&现在手中没有股票卖股票:(今天不是最后一天&&今天的股票价格高于明天||今天是最后一天)&&手中有股票代码如下:class Solution {public...原创 2020-03-25 08:12:49 · 205 阅读 · 0 评论 -
算法刻意练习-LeetCode实战24-恢复二叉搜索树(C++)
题目:恢复二叉搜索树原题链接:恢复二叉搜索树这道题的思路是这样的:先遍历树(哪种遍历方式无所谓),然后将得到树节点按照数据域的大小进行排序,再与原树的中序遍历进行比较。因为二叉搜索树的中序是从大到小的顺序的,所以每次遇到不相同的元素时,按照排序后的节点值进行更改即可。/** * Definition for a binary tree node. * struct TreeNode {...原创 2020-03-24 07:59:11 · 175 阅读 · 0 评论 -
算法刻意练习-LeetCode实战23-不同的二叉搜索树II(C++)
题目:不同的二叉搜索树II原题链接:不同的二叉搜索树II接触到树之后,发现很多题目如果想要做对、做好,就要对递归使用非常熟练。递归确实很难把握,我自己到现在还是没有完全掌握递归,但是在做这道题时,有一个评论区的朋友说的非常好(想不起来在哪里看到的):“如果想要理解递归,就要用递归的思维方式,不要试图在脑子中一步一步进行推演”。是啊,虽然这句话没说到底什么是递归的思维方式,但至少说明了什么不是...原创 2020-03-23 08:15:47 · 180 阅读 · 0 评论 -
算法刻意练习-LeetCode实战22-二叉树的中序遍历(C++)
题目:二叉树的中序遍历原题链接:二叉树的中序遍历递归就好,代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left...原创 2020-03-22 06:59:45 · 264 阅读 · 0 评论 -
算法刻意练习-LeetCode实战21-二叉树的最大深度(C++)
题目:二叉树的最大深度原题链接:二叉树的最大深度这道题使用使用BFS(广度优先遍历),将每个节点的数据域用来记录当前节点的深度即可。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;...原创 2020-03-21 09:00:37 · 539 阅读 · 0 评论 -
算法刻意练习-LeetCode实战20-对称二叉树(C++)
题目:对称二叉树原题链接:对称二叉树这道体可以用递归也可以用迭代,但是用递归比较简单。刚开始以为很简单,但是总是出错,看完别人的解答后原来是递归条件搞错了。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN...原创 2020-03-20 22:09:27 · 296 阅读 · 0 评论 -
算法刻意练习-LeetCode实战19-相同的树(C++)
题目:相同的树原题链接:相同的树这道题我觉得考察的是树的遍历,只要把树按照某一种顺序进行遍历,然后存储到一个向量里,之后再比较向量即可。代码如下:先序遍历解法:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod...原创 2020-03-19 09:12:40 · 184 阅读 · 0 评论 -
算法刻意练习-LeetCode实战18-正则表达式匹配(C++)
题目:正则表达式匹配原题链接:正则表达式匹配自己尝试:自己也尝试了一段时间,纯粹是硬想,既没有使用递归,也没有用DP,总是有一些测试用例无法通过,下面是自己的代码,仅用于纪念(下面代码不能AC)class Solution {public: bool isMatch(string s, string p) { int i = 0, j = 0; w...原创 2020-03-18 12:10:08 · 217 阅读 · 0 评论 -
算法刻意练习-LeetCode实战17-最长回文子串(C++)
题目:最长回文子串原题链接:最长回文子串看到这个题,我印象中之前看过的动态规划有这道题,但是想不起来具体的做法了,没办法,就先用暴力的手段来进行求解(有时候暴力会帮你找到思路;就算暴力之后没有全新的思路,也可以在此基础上进行优化)。代码如下:暴力:class Solution {public: string longestPalindrome(string s) { ...原创 2020-03-17 09:23:17 · 228 阅读 · 0 评论 -
算法刻意练习-LeetCode实战16-无重复字符的最长字串(C++)
题目:无重复字符的最长字串原题链接:无重复字符的最长子串自己想了暴力的方法,感觉不太好,就找了一个大佬写的,自己进行了一下复现。class Solution {public: int lengthOfLongestSubstring(string s) { int st = 0; int len = 0; string str = "";...原创 2020-03-16 20:59:44 · 220 阅读 · 0 评论 -
算法刻意练习-LeetCode实战15-有效的括号(C++)
题目:有效的括号原题链接:有效的括号这道题刚开始我的思路是这样的:每次遇到’(’、’{’、’['就向右寻找是否有对应的括号,但是忽略了成对的括号必须是紧邻的限制。后来看了LeetCode上面大神的题解,感觉思路真的很清晰,而且简洁。使用了栈数据结构,思路是这样:对字符串的每个字符遍历,每次遇到’(’、’{’、’[’,就入栈;遇到’)’、’}’、’]'就查看栈顶是否是对应括号,不是的话说明...原创 2020-03-15 08:36:57 · 182 阅读 · 0 评论 -
算法刻意练习-LeetCode实战14-最长公共前缀(C++)
题目:最长公共前缀原题链接:最长公共前缀因为是“公共”的前缀,因此使用任意一个字符串的长度作为for循环的条件即可,依次判别strs[0]的每一个字符是否在每个字符串中都出现。代码如下:class Solution {public: string longestCommonPrefix(vector<string>& strs) { int nu...原创 2020-03-14 08:27:48 · 188 阅读 · 0 评论 -
算法刻意练习-LeetCode实战13-罗马数字转整数(C++)
题目:罗马数字转整数原题链接:罗马数字转整数依次判断即可,就是有点啰嗦,也没有太多操作的余地,代码如下:class Solution {public: int romanToInt(string s) { int ans = 0; int n = s.size(); for(int i = 0; i < n; i++){ ...原创 2020-03-13 13:28:50 · 175 阅读 · 0 评论 -
算法刻意练习-LeetCode实战12-合并K个排序链表(C++)
题目:合并K个排序链表原题链接:合并K个排序链表这道题我的思路是这样的:遍历所有的链表,然后把所有节点的数据域都存在一个vector中,再对vector中元素进行排序,最后根据vector来建立一个链表即可。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * L...原创 2020-03-12 08:11:30 · 187 阅读 · 0 评论 -
算法刻意练习-LeetCode实战11-删除链表的倒数第N个节点(C++)
题目:删除链表的倒数第N个节点原题链接:删除链表的倒数第N个节点这道题有两种思路,两次遍历和一次遍历。两次遍历的方法比较直观:第一次遍历来得到节点的数量,从而将倒数第几个节点转化为正数第几个节点;第二次遍历的时候只需通过一个变量来记录正在遍历的节点是第几个,如果是需要删除节点的前一个节点,令当前节点的指针域指向下一个节点的指针域即可。/** * Definition for singly...原创 2020-03-11 09:58:38 · 186 阅读 · 0 评论 -
算法刻意练习-LeetCode实战10-两数相加
题目:两数相加原题链接:两数相加这个题不复杂,但是我觉得解决同一个问题代码量却很能体现一个人的编程水平:自己第一次做的代码量是这样子的(不忍直视~~):/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(in...原创 2020-03-10 09:02:09 · 241 阅读 · 0 评论 -
算法刻意练习-LeetCode实战09-环形链表
环形链表:原题链接:环形链表这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(INT_MAX)。一直遍历,这时有两种情况:如果是环形链表,则一定会再次遍历到这个节点,即如果在遍历的过程中遇到数据域为INT_MAX的节点,证明有环,返回true;如果没有环,则一定会出现被遍历到的节点为NULL的情况,返回false。代码如下:/** * D...原创 2020-03-09 08:45:02 · 188 阅读 · 0 评论 -
算法刻意练习-LeetCode实战08-删除排序链表中的重复元素
标题:删除排序链表中的重复元素原题链接:删除排序链表中的重复元素本题可以用来熟悉链表的操作,用两个指针来表示一前一后,每次判断后面的节点数值域是否与前面的节点相同,相同则跳过。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2020-03-08 09:14:14 · 187 阅读 · 0 评论 -
算法刻意练习-LeetCode实战07-合并两个有序链表
题目:合并两个有序链表原题链接:合并两个有序链表正确提交之前自己有两次失败提交的经历,因为链表太长时间没接触了,指针的使用有点忘记了(本来就掌握的不好…)。在这里写出错误,提醒自己,加深印象;也提醒一下正在看这篇文章的你。错误方式一:错误方式二:这两个错误方式(红线)都是没有建立起head头结点与之后的链表的关系,而且节点之间的连接关系也没有建立;而还有冗余的操作(蓝线),没必要再新...原创 2020-03-07 09:39:17 · 163 阅读 · 0 评论 -
算法刻意练习-LeetCode实战06-买卖股票的最佳时机III
题目:买卖股票的最佳时机III链接:买卖股票的最佳时机III首先,我按照自己的思路去尝试着解答,大概的是这样子的:分为两种情况,一次买卖和两次买卖。一次买卖:实质上就是求一个数组内后面的数与前面数的最大差值两次买卖:从每次买卖的时长入手,定义了第一次买卖和第二次买卖的时长分别为i和j(加入第一天买入而第二天卖出时长就为2)。接着遍历第一次买卖与第二次买卖各种可能的时长,不断更新最大收益。...原创 2020-03-06 12:01:36 · 198 阅读 · 0 评论 -
算法刻意练习-LeetCode实战05-最接近的三数之和
题目:最接近的三数之和链接:(https://leetcode-cn.com/problems/3sum-closest/)这道题与自己昨天写的“三数之和”很像,但是个人觉得比其要简单。因为没有了特判与消除相同元素的工作,所以并不复杂。个人的思路是这样的:用一个变量ans来记录与target的差值,然后利用双指针不断判断三数之和与target的差值的绝对值,小于ans绝对值的话更新ans即可...原创 2020-03-05 09:01:16 · 204 阅读 · 0 评论 -
算法刻意练习-LeetCode实战04-三数之和
题目:三数之和原题链接:(https://leetcode-cn.com/problems/3sum/)当然,暴力的方法就不说了,本来自己是尝试了双指针,但是忘了判定重复方案;加上了判定重复方案的代码后,各种数组越界的出错,找了“题解”上的大佬的思路,发现思路是差不多的,但提交就是各种出错:(先贴一张这道题血泪史)最终,硬是照着“题解”中大佬们给出的代码“一步一步”的改成了“别人的代码...原创 2020-03-04 20:55:54 · 174 阅读 · 0 评论 -
算法刻意练习-LeetCode实战-03移除元素
题目:移除元素题目链接:(https://leetcode-cn.com/problems/remove-element/)第一印象:与昨天的移除相同元素的类似(参见:https://blog.youkuaiyun.com/DZZ18803835618/article/details/104607900)首先,将双指针思想拿来就用:class Solution {public: int ...原创 2020-03-03 09:37:56 · 188 阅读 · 0 评论 -
算法刻意练习-LeetCode实战02-删去排序数组中的重复项
题目:删除排序数组中的重复项题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/看到这道题,第一反映是直接来暴力:class Solution {public: int removeDuplicates(vector<int>& nums) { int...原创 2020-03-02 11:33:30 · 178 阅读 · 0 评论 -
算法刻意练习-leetcode实战01-两数之和
题目:两数之和题目链接:https://leetcode-cn.com/problems/two-sum/这是本人第一次用 LeetCode来刷算法题,被LeetCode的输入格式折磨的痛不欲生,下面是代码,主要运用了two points 思想(感觉自己像是用了):class Solution {public: vector<int> twoSum(vector<...原创 2020-03-01 10:52:13 · 261 阅读 · 0 评论