自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

algsup

记录自己的成长。

  • 博客(95)
  • 论坛 (3)
  • 收藏
  • 关注

原创 [字符串]leetcode87:扰乱字符串(hard)

题目:87. 扰乱字符串题解:本题就使用全局搜索,暂时也没有更好的解法。代码如下:class Solution {public: bool isScramble(string s1, string s2) { if(s1==s2)return true; int n=s1.size(); int memo[26]; ...

2019-12-31 21:38:16 88

原创 [链表]leetcode237:删除链表中的节点(easy)

题目:代码如下:class Solution {public: //思路:这题有点沙雕,居然只给一个节点,蒙蔽了好半天,看了评论才知道直接删除node节点就行了 //由于为单向链表我们不能直接删除node节点连接剩余部分,所以我们只能将node的next节点值赋给node,然后删除next节点即可 void deleteNode(ListNode* node) {...

2019-12-31 21:15:41 60

原创 [位运算]leetcode201:数字范围按位与(medium)

题目:题解:思路:此题其实就是寻找[m,n]范围内二进制数高位(左边)没有变化的数,后面补上0即为所求的结果。分析1:判断m、n是否相等,如果不相等,m+1会使m的二进制数末位进位,有进位说明m的末位肯定有0的情况,0与任何数相与皆得0,所以结果的末位肯定是0。同理,不断右移1位进行比较,直到最终m=n时,说明找到了[m,n]这个范围内高位没有变化的数,左移相同位数得到的结果就是所求的...

2019-12-30 22:40:08 81

原创 [DFS]leetcode5297:跳跃游戏 III (medium)

题目:题解:典型的dfs题,需要理解一下注意点,具体实现直接看代码即可。注意点:1)每个点只需要访问一次,因为如果该点不能跳到0,那么通过其他跳法跳到该点也不能跳到0,所以每访问一个点我们就需要记录一次。2)若跳到0,我们就不必继续dfs了,直接返回true即可。代码如下:class Solution {public: bool canReach(vector...

2019-12-29 23:11:26 67

原创 [前序遍历]leetcode1305:两棵二叉搜索树中的所有元素(medium)

题目:5296. 两棵二叉搜索树中的所有元素题解:直接利用树的前序遍历将两课树的所有节点值存放在一个数组中,然后将数组排序输出就好了。代码如下:class Solution {public: vector<int> getAllElements(TreeNode* root1, TreeNode* root2) { vector<i...

2019-12-29 23:05:59 88

原创 [单调栈]leetcode85:最大矩阵(hard)

题目:题解:单调栈本题在84. 柱状图中最大的矩形的基础上对每一行都求出每个元素对应的高度,这个高度就是对应的连续1的长度,然后对每一行都更新一次最大矩形面积。那么这个问题就变成了Largest Rectangle in Histogram。本质上是对矩阵中的每行,均依次执行84题算法。代码如下:class Solution {private: //利用84题最大矩阵...

2019-12-28 10:38:11 99

原创 [位运算][数学]leetcode342:4的幂(easy)

题目:题解:题解1:数学方法+位运算,为4的幂,那么n也为2的幂,n若为2的幂,那么n&(n-1)=0,否则不为2的幂就为1。题解2:迭代法题解3:递归法相似题型:231. 2的幂326. 3的幂代码如下:class Solution {public: //题解1:数学方法 bool isPowerOfFour_1(int n) { ...

2019-12-28 00:55:52 116

原创 [位运算]leetcode231:2的幂(easy)

题目:题解:题解1:除2取余法,若n>1且余数不为0,那么n肯定不是2的幂次方。题解2:位运算,由于2的幂次方表示为二进制只有一位为1,其余位为0,然而负数在计算机表示为二进制的补码(即正数的原码取反+1)。比如8的二进制为00001000,-8的二进制为11111000,所以8&(-8)->00001000 & 11111000 = 00001000,即8...

2019-12-28 00:27:47 72

原创 [dfs]leetcode257:二叉树的所有路径(easy)

题目:题解:经典的dfs框架,大家直接看代码即可。代码如下:class Solution {public: vector<string> binaryTreePaths(TreeNode* root) { if(!root)return {}; vector<string> res; helper(...

2019-12-27 23:55:05 82

原创 [单调栈]leetcode84:柱状图中最大的矩形(hard)

题目:84. 柱状图中最大的矩形题解:题解1:暴力法,直接从每个矩形开始寻找最大的矩形,时间复杂度O(n)。题解2:分治法,感觉和暴力法思路一样,不过是利用最小矩形将大矩形分为左右两部分,注意每次还要计算左右边界形成的最大矩形。题解3:递增栈,维护一个递增栈,为了代码方便我们在数组头尾添加两个0,然后遇到a[i]<s.top()时,我们需要计算以cur=s.top()为高(...

2019-12-27 00:26:30 110

原创 [排序]leetcode274:H指数(medium)

题目:题解:前言:是不是读完题目还是一脸懵逼?是的,这道题翻译的有问题,其实应该跟论文量有关,就是说输出的论文数要小于等于引用次数。排序思路:先将数组排序,然后数组长度 - 下标(n-i=h)表示有h篇论文至少引用citation[i]次,剩下的n-h篇论文的引用数不多于citation[i]次(因为数组已排序),即[0,i-1]范围内的论文引用数小于等于citation[i]次,[...

2019-12-25 23:49:14 155

原创 [滑动窗口]leetcode187:重复的DNA序列(medium)

题目:题解:滑动窗口我们需要用hashmap存放<10个字符的字符串,该字符串的数量>。滑动窗口:下标i从0开始,每次取10个字符作为窗口字符串,判断窗口的字符串是否出现2次然后确定是否添加到res,注意这里只需要判断2次,因为这样可以避免重复添加相同的字符串。i+9<size表示从i起包括i有10个字符,最终取不到10个字符结束循环。代码如下:class ...

2019-12-23 15:43:01 122

原创 [模拟题]leetcode165:比较版本号(medium)

题目:165. 比较版本号题解:纯模拟题,按题目意思编写代码即可。思路:利用小数点将字符串进行分割,然后比较对应段的数字即可。代码如下:class Solution {public: //模拟题:利用小数点将字符串进行分割,然后比较分割到的数字大小 int compareVersion(string version1, string version2) {...

2019-12-23 12:20:36 95

原创 [插入排序]leetcode147:对链表进行插入排序(medium)

题目:147. 对链表进行插入排序题解:插入排序注意对于这种打乱链表顺序的题,我们一般都要设置哑节点dummy。思路:我们每次用head->next来进行插入排序,每次插入排序,我们需要从链表的头部开始寻找插入点,所以我们使用一个指针pre来寻找插入点,若pre->next的节点值大于等于head->next的节点时,我们的插入位置就是pre->next,...

2019-12-23 11:41:46 382

原创 [归并排序]leetcode148:排序链表(medium)

题目:题解:大家就看看大佬的题解吧,我肯定没大佬讲的好。算法伪代码:current = dummy.next;tail = dummy;for (step = 1; step < length; step *= 2) { while (current) { // left->@->@->@->@->@->@->null ...

2019-12-23 10:58:18 421

原创 [二分法]leetcode81:搜索旋转排序数组 II (medium)

题目:题解:二分法本题与旋转螺旋数组的区别在于nums可能存在重复元素,所以我们需要去重后再使用标准的二分法框架。nums[mid]>=nums[left]表示左半部分有序,我们需要在左半部分寻找target,这里分为两种情况,第一种target落在左半边,第二种在左半部分没有找到target,就需要在右半部分寻找。同理nums[mid]<=num[right]表示右半部分...

2019-12-23 10:02:03 88

原创 [模拟题]leetcode5293:子串的最大出现次数(medium)

题目:5293. 子串的最大出现次数题解:模拟题话说今天的题都是模拟题,哭了,对于平时写模拟题较少的我真的上海巨大,哎,菜就是菜,逃避也没什么用。思路:我们每次寻找最短子串是否满足不同字母的数目必须小于等于 maxLetters ,因为是求次数最大的,如果一个长串满足条件,那么它的子串也一定满足,所以只需要看最短的即可。代码如下:class Solution {publ...

2019-12-22 16:28:29 127

原创 [模拟题]leetcode1298:你能从盒子里获得的最大糖果数(hard)

题目:5294. 你能从盒子里获得的最大糖果数题解:模拟题思路:首先initialBoxes中的可用箱子添加,然后每一轮寻找可用箱子并且没有被访问过,或者关着的箱子但是有钥匙的,那么我们就可以吃糖果了,最后直到没有箱子可访问了。代码如下:class Solution {public: //题解:模拟题 //思路:首先initialBoxes中的可用箱子添加...

2019-12-22 16:21:49 147 2

原创 [模拟题]leetcode5292:划分数组为连续数字的集合(medium)

题目:5292. 划分数组为连续数字的集合题解:模拟题(不涉及算法,就是按题目意思编写代码的题就叫模拟题),说实话,我真是个废物,连模拟题都想不好,真的被自己菜哭了。思路:用map存放<数字,该数字的个数>,然后将nums排序,在遍历nums,判断遍历到的num的连续k个数字是否在map中,若不在直接返回false;若在该数字数量-1。代码如下:class So...

2019-12-22 14:53:13 193

原创 [链表]leetcode92:反转链表 Ⅱ (medium)

题目:题解:思路:我们需要反转n-m次,每一次我们将head的next节点移动到需要反转链表部分的首部,需要反转链表部分剩余节点依旧保持相对顺序即可。为了编写代码我们需要用pre来记录需要反转链表部分头节点的前驱节点,同时我们也需要设置一个哑节点dummy,因为m=1时,我们可以也有前驱节点。代码如下:class Solution {public: //思路:head...

2019-12-21 21:22:53 2939 1

原创 [堆]leetcode295:数据流的中位数(hard)

题目:题解:双堆法(大根堆、小根堆)对于快速寻找寻找动态数组的中位数,我们可以使用两个堆来解决。我们使用一个大根堆来存放“前有序数组”,大根堆的堆顶元素为“前有序数组”的最大值;使用一个小根堆来存放“后有序数组”,小根堆的堆顶元素为“后有序数组”的最小值。注意,我们需要控制小根堆的大小要等于大根堆的大小或者比其多1,因为这样我们可以通过二者的大小来快速确定中位数。对于每次添加元素值...

2019-12-21 20:05:14 126 1

原创 [二叉树的层序遍历]leetcode199:二叉树的右视图(medium)

题目:题解:二叉树的层序遍历,添加每层最后一个节点值。代码如下:class Solution {public: //思路:二叉树的层序遍历,添加每层最后一个节点值 vector<int> rightSideView(TreeNode* root) { if(!root)return {}; vector<int&...

2019-12-21 18:33:34 76

原创 [dp]leetcode132:分割回文串 II (hard)

题目:题解:动态规划isPar[j][i]表示s[j]至s[i]是否为回文串,dp[i]表示前i个字符的最少分割次数代码如下:class Solution {public: //题解:动态规划,isPar[j][i]表示s[j]至s[i]是否为回文串,dp[i]表示前i个字符的最少分割次数 int minCut(string s) { ...

2019-12-20 23:32:28 68

原创 [矩阵]leetcode73:矩阵置零(medium)

题目:题解:题解1:空间复杂度O(m*n),使用一个额外的二维数组记录每个0的索引下标i、j。再次遍历,将对应的行,列清零。题解2:空间复杂度O(m+n),将二维矩阵降维成一维数组,大小为m+n。前m个元素存放某行是否为0,若该行为0,那么此行全部元素都要变为0;后n个元素存放某列是否为0,若该列为0,那么此列所有元素都为0题解3:空间复杂度O(1),利用第一行和第一列当作解法二中的...

2019-12-20 16:40:35 72

原创 [三路排序]leetcode75:颜色分类(medium)

题目:题解:三路排序指针zero用来表示0的最右边界,指针two用来表示2的最左边界,指针i指向当前元素。若nums[i]==2,我们需要交换指针two、i所指向的元素值,并将two指针左移若nums[i]==0,我们需要交换指针zero、i所指向的元素值,并就zero和i同时右移若nums[i]==1,我们仅仅只需要将i指针右移即可题解:class Solution {...

2019-12-20 15:48:39 71

原创 [记忆化dfs]leetcode329:矩阵中的最长递增路径(hard)

题目:题解:标准带记忆化的dfs,每个点可以向四个方向递归,递归到边界,该边界的点作为路径上的最后一个点,然后路径长度+1,等到最小子问题解决了,总问题就解决了。代码如下:class Solution {private: vector<vector<int>> demo; int dire[4][2]={{0,-1},{-1,0},{0,...

2019-12-20 14:43:01 93

原创 [快慢指针][数组]leetcode80:删除排序数组中的重复项 II (medium)

题目:80. 删除排序数组中的重复项 II题解:快慢指针代码如下:class Solution {public: //题解:快慢指针,sp表示慢指针,用来记录可以覆写数据的位置;fp表示快指针,用来遍历整个数组 int removeDuplicates(vector<int>& nums) { if(nums.size(...

2019-12-19 23:15:13 92

原创 [字符串]leetcode71:简化路径(medium)

题目:71. 简化路径题解:题解:模拟题,考验基本代码能力使用istringstream和gitline使用’/‘来分割单词,用vector存放目录。若划分得到为空字符串或者’.’,我们不需要返回到上一层目录,进行下一次分割;若我们划分得到为"…"且vector不为空,我们需要返回上一层目录,也就是删除vector的尾元素;若划分得到的单词为目录,我们就添加这个单词到vector中...

2019-12-19 22:26:24 74

原创 [数组][二分法]leetcode74:搜索二维矩阵(medium)

题目:题解:题解1:暴力法,直接遍历寻找目标值题解2:缩小领域法,从数组左下角向右上角寻找目标值题解3:二分法,将二维矩阵拖为一维矩阵,然后利用标准的二分查找就好了,注意一下一维和二维坐标之间的转换就好代码如下:class Solution {public: //题解1:暴力法 bool searchMatrix_1(vector<vector<...

2019-12-18 15:18:03 88

原创 [二分法]leetcode704:二分查找(easy)

题目:题解:本题是二分查找的裸题,也是最标准的二分法的模板1,循环结束的条件为区间内的元素数量为0。代码如下:class Solution {public: int search(vector<int>& nums, int target) { if(nums.empty())return -1; int begin=0,...

2019-12-18 15:08:49 77

原创 [链表]leetcode143:重排链表(medium)

题目:题解:暴力法,将链表节点全部存入数组中,然后每次取首尾元素进行相连就好了。代码如下:class Solution {public: //题目意思:每次头尾头尾头尾取元素,组成新的链表 //题解:暴力法,将链表的节点存放在一个数组中,然后每次取首尾元素进行相连就好了 void reorderList(ListNode* head) { ...

2019-12-17 22:08:24 524

原创 [dp]leetcode198:打家劫舍(easy)

题目:题解:题解1:关于题解1的代码若理解起来确实比较困难的话,倒不如直接看题解2的动态规划解法,因为题解1的做法跟dp做法一样的,只是没有用dp数组来保存每个状态i的值,而是每次都更新sum0和sum1,确定sum0或sum1要么为房间i-1房屋可盗窃的最大值,要么就是i-2房屋可盗窃的最大值加上当前房屋的值num[i]。题解2:动态规划dp[i]表示房间i获得最大金额数。...

2019-12-17 21:24:01 100

原创 [区间贪心]leetcode452:用最少数量的箭引爆气球(medium)

题目:题解:区间贪心本题与435. 无重复区间的算法思路一模一样,不过是将边界的<=改为<了,因为两个区间的边界相交也会被引爆。代码如下:class Solution {public: //题解:区间贪心,435.无重复区间的算法思路一模一样,不过是将边界的<=改为<了,因为两个区间的边界相交也会被引爆 int findMinArrow...

2019-12-17 19:54:05 64

原创 [区间贪心]leetcode435:无重复区间(medium)

题目:题解:区间贪心本题是经典的区间贪心题,在晴神的《算法笔记》中有学习过,所以本题也就会做了。思路:将先进行排序,将区间的左端点先按由小到大排序;相同的左端点,按右端点由小到大排序。注意题目条件:可以认为区间的终点总是大于它的起点。,所以关于排序问题大家不要想太多,就是我第一句话说的那样。然后进行贪心算法,首先我们先选第一个区间的右端点作为边界值,直到某个区间的左端点大于等于边界...

2019-12-17 19:40:17 455 3

原创 [数组]leetcode59:螺旋矩阵 II (medium)

题目:题解:54. 螺旋矩阵的代码结构一样的,确定上下左右四条边的位置,然后遍历就行了。代码如下:class Solution {public: vector<vector<int>> generateMatrix(int n) { if(n==0)return {}; vector<vector<in...

2019-12-16 22:02:41 67

原创 [二分法]leetcode378:有序矩阵中第K小的元素(medium)

题目:题解:题解1:暴力法,将二维矩阵转换为一维矩阵,然后排序,最后直接返回第k小元素就好了。题解2:二分法,我们以数组元素的最小最大值作为二分查找的左右边界,然后根据小于等于mid值的元素个数来划分每次二分查找得区间。若小于mid值的元素小于k,那么第k小的元素肯定在右边界且不包含mid值,所以left=mid+1;若小于等于mid值得元素个数大于等于k,那么第k小的元素肯定在...

2019-12-16 20:09:41 84

原创 [一维前缀和]leetcode303:区域和检索 - 数组不可变(easy)

题目:题解:一维前缀和,元素数组[0,j]的前缀和对应prefix[j+1]代码如下:class NumArray {private: vector<int> prefix;public: //题解:一维前缀和 NumArray(vector<int>& nums) { int n=nums.size()...

2019-12-16 15:47:43 88

原创 [前缀和子矩阵模板]leetcode304:二维区域和检索 - 矩阵不可变(medium)

题目:304. 二维区域和检索 - 矩阵不可变题解:前缀和子矩阵模板题,直接套板子就好了。代码如下:class NumMatrix {private: vector<vector<int>> prefix;public: //题解:前缀和子矩阵模板题 NumMatrix(vector<vector<int>...

2019-12-16 15:26:10 249

原创 C++:前缀和子矩阵的模板

前缀和子矩阵模板:解释:矩阵a的第一行第一列全部铺0,是用来更好的帮助建立前缀和子矩阵s的。前缀和子矩阵s的建立:s[i][j] = s[i-1][j] + s[i][j-1] -s[i-1][j-1] + a[i][j];。解释:以点[i,j]作为作为最右下角的最大矩阵的前缀和需要加上点[i-1,j]和点[i,j-1]的前缀和,然而会重复多加一个点[i-1][j-1]的前缀和,所以要减一...

2019-12-15 17:53:23 289

原创 [前缀和矩阵]leetcode5285:元素和小于等于阈值的正方形的最大边长(medium)

题目:5285. 元素和小于等于阈值的正方形的最大边长题解:前缀和子矩阵大佬说用前缀和子矩阵+二分,我本人菜鸡才搞懂前缀和子矩阵,所以直接将前缀和子矩阵了。建立前缀和子矩阵需要使用两个矩阵,第一个矩阵用来给原矩阵的最左边和最上边加一排0,第二个矩阵是用来建立前缀和子矩阵的。重点理解①:生成前缀和子矩阵的s[i][j] = s[i - 1][j] + s[i][j - 1] - ...

2019-12-15 17:44:42 88

空空如也

CSDN 最近改版真的很丑!!!

发表于 2020-04-20 最后回复 2020-04-20

_Fast的留言板

发表于 2020-01-02 最后回复 2020-01-02

csdn的个人分类的博客顺序为什么不能按时间排序了??

发表于 2019-09-01 最后回复 2019-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除