自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(186)
  • 收藏
  • 关注

原创 Leetcode-0 刷题杂记

用队列实现栈两个队列,一个数据队列,一个辅助队列。在pop()操作时,将数据队列中前size()-1个元素推入辅助队列,弹出最后一个数,然后数据队列=辅助队列。用栈实现队列两个栈,一个数据栈,一个辅助栈。在pop()操作时,将数据栈中前size()-1个元素推入辅助栈,弹出最后一个数,然后数据栈=辅助栈。...

2020-05-09 15:07:50 182 1

原创 Leetcode-696 计数二进制子串

前记也真的是好久没记录刷题了,被夏令营磨平了棱角,但是还是要继续努力!题目添加链接描述思路考虑到可以接受重复,本质上关键点在于切换这件事。last:上一个类型数字个数cur:目前的类型数字个数当last<cur 就可以持续计数代码class Solution {public: int countBinarySubstrings(string s) { int cnt=0; int last=0; int cur=1

2020-08-10 22:28:22 172

原创 Leetcode-93 复原IP地址

忙碌但是莫名其妙的六月,终于又可以刷题了,六月六月慢一点…DFSdfs(string s,string tmp,int word)s是剩余需要分割的字符串 tmp是已经分割好的字符串 word是已经分割出的ip地址数目,用于结束递归,确定正确结果class Solution {public: vector<string> res; vector<string> restoreIpAddresses(string s) { string.

2020-06-27 15:02:31 202

原创 Leetcode-54 螺旋矩阵

手把手教你实现人脸识别支付系统

2020-06-12 23:30:27 214

原创 Leetcode-16 最接近的三数之和

题目链接相似题目:Leetcode-15 三数之和排序+双指针对数组nums排序,锁定一个数字nums[i],再使用双指针考虑剩下的两数之和双指针初始化:lf=i+1(不用再从头开始,如果有这个组合在i更小就会被发现的)对于每一个ans取值,比较res和ans谁和target差绝对值更小.class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sor

2020-06-04 22:29:36 203

原创 【第191场周赛】Leetcode-1466. 重新规划路线

碎碎念+关键点1.审题十分重要,一开始看到路径,多个点,我下意识认为这是个图,导致忽略了很多可以优化的信息,最后超时没得救。2.注意题中要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)因此这道题可以看作以0点为根的一个树的遍历同时,我们只能变动方向,因此不存在最小,成立即所求。(除非变来变去的无意义up)DFS使用pair对同时存储节点和方向,正向为1,负向为0进行深度优先遍历,同时记录一个父节点,避免在0节点处记录1,又在1节点处记录0。class Solu

2020-06-03 23:19:36 301

原创 Leetcode-面试题64 求1+2+...+n

题目链接荒野求生版敲代码?递归利用了&&符号的短路效应。class Solution {public: int sumNums(int n) { int sum=0; n>1 &&(sum = sumNums(n-1)); return n+sum; }};

2020-06-02 23:26:06 204

原创 【第27场双周赛】Leetcode-1463 摘樱桃

三维dp+五重循环,我只想感叹疯狂套娃。思路定义dp[i][j1][j2]:表示在i层,左侧机器人在j1处,右侧机器人在j2处。初始化dp[0][0][cols-1] = grid[0][0] + grid[0][cols-1];递推公式(j1!=j2时)dp[i][j1][j2]=max(dp[i][j1][j2],dp[i-1][index1][index2]+grid[i][j1]+grid[i][j2]);两个注意点1.j1和j2能达到的范围和row有关系。2.if(j1=.

2020-06-01 16:00:28 216

原创 【第27场双周赛】Leetcode-1462. 课程安排 IV

有一说一,这周两道图双双超时真的让我伤心眼泪流,流泪猫猫头。究竟是邻接表还是邻接矩阵呢?Floyed本题类似于Leetcode-399 除法求值,所以也可以考虑并查集算法,但是还是floyed简单。floyed算法可求出多源最短路径,本题只需求是否有路径。选取每一个点为中转点k,获取图中任意两点的关系。class Solution {public: vector<bool> checkIfPrerequisite(int n, vector<vector&lt.

2020-05-31 22:40:23 168

原创 Leetcode-413 等差数列划分

题目链接今天的我,就是觉得自己不是在做算法题,做的就是数学题!找规律…QAQ我の解sub[i]=A[i+1]-A[i]原数组转化为一个差值数组,问题转化为差值数组中有多少个连续的相等值。dp:记录相等值的个数,res:记录最后的结果class Solution {public: int numberOfArithmeticSlices(vector<int>& A) { if(A.size()<=2) return 0;

2020-05-30 18:29:59 204

原创 Leetcode-6 Z字形变换

题目链接我の解感觉就是找规律欸,虽然一开始我并没有看懂Z是个啥。与其说是Z,我觉得是个L变换。如图所示,红色的为一组,利用numRows可算出组的大小。对于每一个s[i]计算它所在的行数,开一个vector<string>数组,将s[i]加入str[行]。最终将每一行加起来得到结果。class Solution {public: string convert(string s, int numRows) { if(numRows<=1) retu

2020-05-30 11:13:55 149

原创 Leetcode-1143. 最长公共子序列

题目链接DP思路引导咋说呢,当你列了一个二维dp时,往往都会考虑左上方的三个框框对这个框的递推。同类型见【第190场周赛】Leetcode-1458 两个子序列的最大点积做了几道之后,你就会觉得它很经典。本题具体思路定义dp[i][j]表示text1[0-i]和text2[0-j]的最长公共子序列长度。初始化将数组开大一圈,因为""和任何字符串结果都为0.递推if(text1[i-1]==text2[j-1])这对字符会被选入公共子序列,dp[i][j]=dp[i-1][j-1

2020-05-29 22:41:43 189

原创 Leetcode-343 整数拆分

题目链接与其说是一道算法题,不如说是一道数学题。自己发现的无证明规律对于一个数的最佳结果dp[n] 往往是dp[均分],或者均分附近的值相乘。本质上其实是考虑了2,3为因子的可能。class Solution {public: int integerBreak(int n) { if(n==2||n==3) return n-1; vector<int> dp(n+1,1); dp[2]=2; dp[3]

2020-05-29 22:07:34 207

原创 Leetcode-263&264 丑数Ⅰ&Ⅱ

丑数只包含质因数 2, 3, 5 的正整数。263 丑数Ⅰ循环除以5,3,2这些因子,看最后结果是否为1。class Solution {public: bool isUgly(int num) { if(num<1) return false; while(num%5==0) num=num/5; while(num%3==0) num=num/3; while(n

2020-05-29 20:20:32 188 1

原创 Leetcode-91. 解码方法

题目链接谁能想到测试样例还有0和00这种非法输入,哭了。!!边界测试的重要性!

2020-05-28 17:15:42 386

原创 Leetcode-120 三角形最小路径和

题目快乐做一个DP厨。二维朴素解法class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int mm=INT_MAX; int level=triangle.size(); vector<vector<int>> dp(level+1,vector<int>(triangle[le

2020-05-28 12:09:28 173

原创 Leetcode-63 不同路径Ⅱ

DFS(超时)class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { return dfs(obstacleGrid,0,0); } int dfs(vector<vector<int>>& obstacleGrid,int x,int y) { if(x

2020-05-27 23:09:48 152

原创 Leetcode-740 删除与获得点数

题目链接思路——(打家劫舍4?)一开始看到左右都受影响就开始想,但是后来才发现这就是打家劫舍鸭!!!只要你选用了a,那么a-1和a+1都和你无关了,那么肯定是要贪心的选全部的a才对得起损失。问题转化为对于每一个元素,不能选它的临近值(不能偷隔壁),联动成功!具体代码1.将nums数组最大值求出mm2.开一个mm+1大小的value数组,value[mm]表示mm的个数3.dp计算打家劫舍,递推dp[i]=max(dp[i-2]+i*value[i],dp[i-1]);代码class

2020-05-27 21:26:46 174

原创 Leetcode-974 和可被 K 整除的子数组

题目链接本来我以为这又是一道常见的前缀和,直到连续两个负数的错误样例让我意识到还是要谨慎。关键点如果两个前缀和同余,证明其中间的数和为K的倍数。记录book[0]=1,这样就考虑了前缀和本身被 K 整除的情况。注意负数的处理,因为这道题是利用sum对K取余来判断是否能整除。c++中,统一处理为((sum%K)+K)%K。class Solution {public: int subarraysDivByK(vector<int>& A, int K)

2020-05-27 15:29:35 158

原创 【第190场周赛】Leetcode-1457 二叉树中的伪回文路径

位运算计数思路类似于Leetcode-1371 每个元音包含偶数次的最长子字符串关键点在于怎么记录这些数,并且判断他们是能构成回文,即奇数个数字只能有一个。将1-9映射到二进制位上,做异或和,这样偶数的数字位会为0,数字位为1证明该数字有奇数个。判断sum数字位为1的个数小于等于1方法1:与1做&运算,然后不停右移,判断最后一位方法2:sum&(sum-1)==0class Solution {public: int pseudoPalindromicPaths

2020-05-26 14:27:02 233

原创 【第190场周赛】Leetcode-1458 两个子序列的最大点积

感想每次都做不出竞赛的最后一道dp,QAQ。话说这次有一下子测好多样例的功能,点赞!

2020-05-26 13:10:16 224

原创 Leetcode-887 鸡蛋掉落

传说中的经典面试题李永乐老师的B站讲解

2020-05-23 23:46:59 194

原创 Leetcode-213 打家劫舍 II

本题链接相关笔记Leetcode-196 打家劫舍Leetcode-337 打家劫舍Ⅲ本题思路本题关键在于第一家(0)和最后一家(nums.size()-1)不能同时偷在这个前提下,我们把这个问题分解为两个子问题0~nums.size-2和1~nums.size()-1对于偷这两个范围,我们可以获得的最大值。class Solution {public: int rob(vector<int>& nums) { if(nums.size()==

2020-05-22 20:36:59 123

原创 【第26场双周赛】Leetcode-1449 数位成本和为目标值的最大数字

题目链接

2020-05-22 15:54:35 215

原创 【4月打卡,联动Leetcode-829】面试题57 - II. 和为s的连续正数序列

题目链接前缀和由于做了太多前缀和,导致我麻木地直接写了前缀和。但是无论是map的维护还是很多数字的加和都让这个解法很糟糕class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> res; map<int,int> mp; long sum

2020-05-22 13:06:54 170

原创 【5月打卡】Leetcode-1371 每个元音包含偶数次的最长子字符串

解题思路:位运算状态压缩+前缀和思考过程滑动窗口?不对,成立之时不代表后面不成立。—> 前缀和? 但是五个数咋确定偶数?—>看题解,将aeiou存在不同的二进制位上,利用异或控制字母的个数。位运算状态压缩aeiou对应5个二进制位,位数为0(突然发现了520???)表示个数为偶数。当遇见a时,record=record^16=record^10000.如果a的个数原来为奇数,1^1=0,如果a的个数原来为偶数,1^0=1.前缀和前缀和思路参考Leetcode-560

2020-05-20 23:01:12 185

原创 【4月打卡】面试题13. 机器人的运动范围

成年人,最重要的就是情绪稳定。(喂喂喂,这不是你写简单题的借口欸。DFS全局变量中不可以用vector<vector<bool>> visited(100,vector<bool>(100,false));在leetcode中bool visited[101][101]={false};全局并赋初值可以在codeblocks中全局bool visited[101][101]+memset(visited,false,sizeof(visited));可,.

2020-05-17 23:15:08 188 2

原创 【3月打卡】面试题59 - II. 队列的最大值

镜像问题(雾):Leetcode-155 最小栈题目链接温习dequepop_back();//删除容器最后一个数据pop_front();//删除容器第一个数据push_back(elem);//在容器尾部添加一个数据push_front(elem);//在容器头部插入一个数据pop_back();//删除容器最后一个数据pop_front();//删除容器第一个数据思路维护正常储存数的队列和非递增的单调双端队列,双端队列的头为最大值,维护过程类似于单调栈。若此次新增数据的值

2020-05-16 21:30:40 153

原创 【3月打卡】面试题62. 圆圈中最后剩下的数字

约瑟夫环参考题解,本篇示例图转自题解,侵删。约瑟夫环的本质在于新环与旧环之间的下标映射关系。想知道最后的幸运儿是谁? 顺着最新的环一路逆推找到它本来的位置。新环与旧环之间的映射满足以下关系:old_index= (new_index + m) % old_sum(上一轮数字数)如图:n=10, m=4class Solution {public: int lastRemaining(int n, int m) { int index=0;//下标,此时圆

2020-05-16 18:30:36 246

原创 【4月打卡】面试题 08.11. 硬币(完全背包问题)

题目同类型 Leetcode-322 零钱兑换完全背包警告⚠dp[n]表示数n有几种表示方式#define debug(x) cout<<#x<<x<<endl;class Solution {public: int waysToChange(int n) { vector<int> dp(n+1,0); dp[0]=1; vector<int> coins={1,5,10,2

2020-05-16 12:11:03 178

原创 【5月打卡】 Leetcode-25 K 个一组翻转链表

笨拙の解将问题拆解成三部分:判断剩余长度是否需要反转, 控制每组反转,组与组之间连接.思路易懂,问题也比较多。遍历次数较多,每个节点都会遍历三次,速度不太好。在最后一部分用了递归就其实并不满足常数额外空间。class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { if(head==NULL||head->next==NULL) return head; //

2020-05-16 11:47:36 156

原创 【4月打卡】面试题56 - I. 数组中数字出现的次数

题目个人认为是Leetcode-136 只出现一次的数字的升级版136中只有一个数字只出现一次,本题中有两个因此136的方法为求异或和,本题为求异或和+分组这个分组就是本题的关键点例如:nums = [1,2,10,4,1,4,3,3] 异或和:ans=8 ,ans反映了2和10 的不同位数2:0001 10:0101 ans=8(0100)取出任意一个不为0的位,这里是让help与ans进行&运算寻找使用help^nums[i]进行分组,相同的数一定会被分到一组,并且经过异或

2020-05-15 21:21:24 123

原创 【4月打卡】Leetcode-1111 有效括号的嵌套深度

题目题目超长,并且不好理解QAQ。但是本质上就是希望将原括号字符串分成A串和B串,使得max(depth(A), depth(B)) 的可能取值最小。注意A.length + B.length = seq.length,故max最小时,即为depth(A)==depth(B)成立时笨拙的加了很多没必要信息的第一版但是本质就是计算出嵌套深度之后,把嵌套的’('平分给 A,B。#define debug(x) cout<<#x<<x<<endl;clas

2020-05-14 21:38:19 115

原创 【4月打卡】Leetcode-542 01 矩阵

题目我的比较暴力的解法class Solution {public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { if(matrix.size()==0) return matrix; vector<int> dx={0,0,-1,1}; vector<int> dy={-1,1,0,

2020-05-13 23:43:58 115

原创 【4月打卡】统计「优美子数组」

题目将偶数改为0,奇数改为1,问题就转化为求和为K的连续子数组Leetcode-560 和为K的子数组class Solution {public: int numberOfSubarrays(vector<int>& nums, int k) { for(int i=0;i<nums.size();i++) if(nums[i]%2==0) nums[i]=0; e

2020-05-13 21:28:39 95

原创 【3月打卡】Leetcode-994 腐烂的橘子

人是会成长的生物。——终于我也从不会写BFS和DFS,变成一个没有感情的遍历矩阵机器多源广度优先搜索num表示橘子数(腐烂+新鲜)。用size=que.size();限制同一层次(分钟)的腐烂橘子,用于控制时间最后一层的橙子已经腐烂完毕,遍历它的四周也没有增长,故minute-1class Solution {public: int orangesRotting(vector<vector<int>>& grid) { vecto.

2020-05-12 17:33:32 118

原创 【3月打卡】Leetcode-945 使数组唯一的最小增量

计数使用数组计数,对于每一个个数大于1的数让其自增,找到比它大且每出现的数字find。find-i即为这个数的增量,num[find]由0-->1,num[i]--;class Solution {public: int minIncrementForUnique(vector<int>& A) { int step=0; vector<int> num(80000,0);//可能出现40000个40000 故要开到80

2020-05-12 15:40:20 157 1

原创 【3月打卡】Leetcode-914 卡牌分组

题目啰嗦的第一版使用map统计数字个数mm代表出现最少次数,如果mm==1,return false;否则考虑分组中个数从2~mm的可能性,整除代表可以分。class Solution {public: bool hasGroupsSizeX(vector<int>& deck) { if(deck.size()<=1) return false; unordered_map<int,int> mp;

2020-05-10 16:26:59 95

原创 【4月打卡】Leetcode-289 生命游戏

题目链接朴素写法虽然思路很朴素,但是效果很好,是双百的解法。对于边界的处理,开一个更大的数组把原数组包起来,外围值设为0,不会影响最终值。class Solution {public: void gameOfLife(vector<vector<int>>& board) { if(board.size()==0) return; vector<vector<int>> tmp(board.size

2020-05-10 14:52:19 115

原创 【4月打卡】Leetcode-445 两数相加Ⅱ

题目一开始想把数字都推出来,加起来再写回链表,但是long都爆了这件事教育我要好好写题。数字需要逆序,考虑栈。两个栈推入数字,然后依次拿出,考虑进位。由于我的第一版代码充满了垃圾的ctrl cv,就不放了,放一个看了题解之后的改良版。class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { if(l1->val==0&&l2->val==0)

2020-05-09 23:12:54 117

空空如也

空空如也

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

TA关注的人

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