刷题笔记
文章平均质量分 91
刷题日常碎碎念
Kay21
这个作者很懒,什么都没留下…
展开
-
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”] 输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-common-prefixclass Solutio.原创 2020-08-04 21:36:37 · 137 阅读 · 0 评论 -
只有两个键的键盘
最初在一个记事本上只有一个字符 ‘A’。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字 n 。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 ‘A’。输出能够打印出 n 个 ‘A’ 的最少操作次数。示例 1:输入: 3 输出: 3 解释: 最初, 我们只有一个字符 ‘A’。 第 1 步, 我们使用 Copy All 操作。 第 2 步,.原创 2020-08-01 19:40:37 · 289 阅读 · 0 评论 -
开门人和关门人
每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。 Input测试输入的第一行给出记录的总天数N ( > 0 )。下面列出了N天的记录。每天的记录在第一行给出记录的条目数M ( > 0 ),下面是M行,每行的格式为证件号码 签到时间 签离时间其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。 Output对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空..原创 2020-07-31 21:19:52 · 265 阅读 · 0 评论 -
删除与获得点数
给定一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入: nums = [3, 4, 2] 输出: 6 解释: 删除 4 来获得 4 个点数,因此 3 也被删除。 之后,删除 2 来获得2 个点数。总共获得 6 个点数。示例 2:输入: nums = .原创 2020-07-29 17:36:38 · 353 阅读 · 0 评论 -
跳跃游戏III(BFS)
感觉这题也可以用之前总结的模板,主要注意一下下标不要重复访问,因为第一次访问无法到达对应元素值为0 的下标,就已经证明这个下标处已无解,重复访问会陷入死循环。所以我们可以将访问过的下标对应数值设置为-1,表示已经访问过。这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。注意,不管是什么情况下,你都无法跳到数组之外。示例 1:原创 2020-07-16 21:36:54 · 350 阅读 · 0 评论 -
二叉树的堂兄弟节点BFS
刷了几道BFS在二叉树方面运用的超级简单题,大致有了个模板,先看下今天的简单题在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y = 3 输出:f原创 2020-07-13 23:02:51 · 596 阅读 · 0 评论 -
BFS求N叉树的深度
还是一道BFS的简单题,因为我菜 这题和昨天的二叉树深度异曲同工,就是在遍历子节点时有点点差别。然而我实在太菜了,就这点点差别,我就不会了,然后我也是看了题解区大佬们的题解,然后问了大佬之后,还是不会用自己的方式写出来,那就直接贴题贴代码吧图片截自LeetCode/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(原创 2020-07-10 17:08:00 · 350 阅读 · 0 评论 -
BFS求二叉树的最大深度
谁能想到我一个快大三的老学姐,连基础算法都不会 刷了题广度优先的超简单算法题,但我还是看了题解区大佬们的题解才写对。贴题:图片截自LeetCodeemmm,好像也没什么好总结的,BFS的算法思想就是利用队列,本题大致步骤就是建立空队列q判断源点,不为空则入队列取出队首节点,找其左右节点,不为空则入队列删除队首节点二叉树深度加一重复3-5,直到遍历完整棵树代码如下:/** * Definition for a binary tree node. * struct TreeNode原创 2020-07-09 22:30:01 · 651 阅读 · 5 评论 -
LeetCode寻找比目标字母大的最小字母
熬过了期末各科的预习,又要开始新的刷题学习了,鉴于上次刷题已经是一个月前了,这次还是选择了一道很简单的二分查找题。至于到底有多简单,就是完全直接套模板,考虑一下循环的特殊条件。先上题 图截自LeetCode因为字母是依序循环出现,也就是说,假如目标字母刚好是数组中的最大值或者大于最大值时,数组的第一个字母就是要找的比目标字母大的最小字母。直接上代码class Solution {public: char nextGreatestLetter(vector<char>原创 2020-07-07 15:10:59 · 155 阅读 · 0 评论 -
LeetCode可获得的最大点数
还是一道简单题,先贴题虽然题目描述看起来很复杂,只能从两端取卡牌,而且还得考虑拿了这张卡牌是不是最优解,说实话要是在两三个星期以前这道题简直就是要了我的命了。但是其实很简单,我们可以换个角度来看,只要我取出中间的cardPoints.size()-k个数,剩下的就刚好是两端的数。就相当取一个长度为cardPoints.size()-k长度的窗口在数组中滑动即可大概就是下面这样:相对应颜色的1、2、3即为要取的卡牌位置(不是顺序)。然后就是只要找到这个滑动窗口的最小值,总和减去窗口最小值即为答案。代码原创 2020-05-27 23:13:20 · 254 阅读 · 0 评论 -
LeetCode最长不含重复字符的字符串
颓废许久后的打卡更新接着之前学习的滑动窗口和双指针,虽然已经刷了好几道滑动窗口 的题,但是还是没怎么掌握真的用法,就先上个简单题好了(题目图片截自LeetCode)思路大致就是利用双指针遍历,遇到重复的就左指针右移,直至无重复,没什么好说的。直接贴代码class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char,int>window; int原创 2020-05-27 00:38:17 · 189 阅读 · 0 评论 -
LeetCode无重复字符的最长子串
看了下题目标签,有双指针和滑动窗口,然后就想从第一个字符开始,建立数组记录其出现次数,记录下最大窗口值。因为真的太菜了,然后写了很长很长。主要不会用哈希表 。这是一个极度悲伤的事故,第一次因为边界问题,答案错误,然后改好了在VC运行是正常的,在LeetCode上执行也是正常的,但是最后提交的时候编译错误。。。。。Line 11: Char 13: runtime error: index -65 out of bounds for type ‘int [26]’ (solution.cpp)然后我不会改原创 2020-05-12 18:40:41 · 2153 阅读 · 3 评论 -
LeetCode总持续时间可被 60 整除的歌曲
emmm就是一个很简单的求在一个数组中,a[i]+a[j]能被60整除的组合数,且 i<j;像我这么菜鸡的一定是直接两重循环暴力求解(代码太简单就不贴了),然后华丽丽的超时了,其实在考虑时间的时候,我觉得也应该考虑了一下两个数相加的和会不会超出整形范围。所以就有了这篇记录,可以先将a[i]和a[j]对60分别取余,只要其余数相加为60及证明他们的和可以被60整除。但在这道题里不仅是判断能否被整除还要求组合数,所以可以建立一个数组,以余数为下标存储相同余数个数,然后再进行组合即可。代码如下:cla原创 2020-05-08 18:10:04 · 150 阅读 · 0 评论 -
求回文数
记一次掉坑里的回文数求解看不懂的直接笔算一遍过程,至于代码冗长问题,我就是不改。。 bool isPalindrome(int x) { int sum=0; if(x==0) return true; else if(x<0||x%10==0) return false; w...原创 2020-05-07 19:18:06 · 227 阅读 · 0 评论 -
LeetCode在排序数组中查找元素的第一个位置和最后一个位置
emmm,这是个悲伤的故事,先上题:刚开始打算直接暴力枚举,然后看到算法时间复杂度,一看这复杂度就和二分查找很配,然后就打算进行两次二分查找确定具体边界,然后就超时,这是超时代码1号:class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { ...原创 2020-05-06 23:15:28 · 174 阅读 · 2 评论 -
LeetCode在D天内送达包裹的能力
说实话要是不是因为这道题是归类在二分查找里面,我就只会暴力枚举了,所以算法思想真的很重要。先上题:(题目截自LeetCode)题目要求包裹要按顺序,而求的是最低运载能力,所以可以用二分查找船的运载能力,而且可以知道二分查找的范围便是单个包裹的最大重量和所有包裹的重量和。最后返回的是left而不是mid,因为求的是最低运载能力,就是合适范围内的最小值。还有要注意的就是在计算天数时,当加上后一个包...原创 2020-05-05 15:26:14 · 259 阅读 · 2 评论 -
LeetCode统计封闭岛屿数
(题目截图截自LeetCode)题目对于封闭岛屿的要求是上下左右所有相邻区域都是水域,所以首先排除处于矩阵边框的陆地,设置一个flag,利用深搜判断陆地周围是否是陆地,如果不是的话结束本次搜索。封闭岛屿数加一;AC代码如下:class Solution {public:void dfs(vector<vector<int>>& gird,s...原创 2020-05-04 19:56:36 · 237 阅读 · 0 评论 -
LeetCode合法搜索二叉树
首先理解一下什么是合法搜索二叉树,通俗来说就是是一棵空树,或者若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值(来源于百度)二叉搜索树可以用中序遍历来判断,因为想太多和太垃圾,我的代码只过一半的数据,然后就双看了大佬的题解,改完代码如下(记得val定义为long,int只能过69组数据)因为我又错了 :/** * D...原创 2020-05-03 23:49:25 · 183 阅读 · 0 评论 -
LeetCode检查平衡性
还是一道简单题(来源于LeetCode)毕竟真的太菜了。。。先上题:思路如下:直接递归分别得到左右子树的高度,相减判断高度差即可,然后因为真的是菜,写了好几次都只过了33组数据,然后就看了leetcode里大佬的题解;修改后代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; ...原创 2020-05-03 17:20:09 · 211 阅读 · 0 评论 -
leetcode整数反转
先上题deidao就很简单的题,初始新数为0,直接原数对10取余得到尾数,原数除以10消去已得到的尾数,然后新数乘以10与尾数相加,一直重复至原数最高位。但是垃圾的我怕忘记数值约束的写法。。代码如下class Solution {public: int reverse(int x) { int sum=0; while(x) { ...原创 2020-05-02 18:41:44 · 138 阅读 · 0 评论 -
蓝桥历届试题 大臣的旅费
在试题集里有提示,可以用深搜解决。这跟平常的找路径不同的地方在于没有给起点和终点,所以要进行两次深搜,第一次先找到起点,第二次再找出花费最多的路径。需要注意的是储存高速公路的信息是要记得是双向的,不能只存起点,不存终点。#include <iostream>#include <string>#include <cstring>#include <a...原创 2020-05-01 18:12:55 · 185 阅读 · 0 评论 -
蓝桥 算法训练 特殊的数字四十
今天是一道超水的水题直接枚举1000到9999,然后先求出各个数位上的数。再判断他们的和是否是10就可以了,过于简单,直接上代码bool fun(int n){ int g=n%10;//个位 int s=n/10%10;//十位 int b=n/100%10;//百位 int q=n/1000;//千位 if(g+s+b+q==10) return true; return...原创 2020-04-30 17:06:59 · 283 阅读 · 0 评论 -
01背包问题(超不详细简易版笔记)
其实背包问题大一的时候C++老师就一直念叨,但是奈何懒和无知,老师讲的时候就总觉得soeasy。老师原话解释如下:你的背包容积为M,然后学校某社团搞活动发零食(见者有份)一共有N种零食,每种每人只能拿一包,第i种体积为w[i],好吃程度为d[i],你要怎么拿才能拿到有多又好吃的?当然是一包一包的选择拿或者不拿,然后再比较拿了或者不拿的好吃程度(在背包容积范围内)最后就可以了呀。当时就觉得:哦!...原创 2020-04-25 15:46:32 · 237 阅读 · 0 评论 -
蓝桥历届试题 分巧克力
每日一刷题目如下:抱着侥幸心理觉得后台不会有100000*100000的数据,然后直接暴力枚举,代码如下:int main(){ int n,k,a[N],b[N],ans; cin>>n>>k; for(int i=0;i<n;i++) { cin>>a[i]>>b[i]; } int len=100000; for...原创 2020-04-21 20:43:28 · 119 阅读 · 0 评论 -
排序算法集合(冒泡,插入,选择,快排
以从小到大排序举例,默认数组下标从 0开始先从最简单的冒泡开始好了,就像他的名字,最大的数从原始位置一直冒冒冒冒到最后一位,对每一对相邻的元素进行比较,如果a[j]>a[j+1]就交换位置,比如 5 4 1 3 2 经过第一轮冒泡会变成 4 1 3 2 5。因为一共有n个数,所以第一层循环要进行n趟排序;而在第一趟时的元素要与n-1个元素比较,而在第二趟时,第二趟的元素只需要与n-2个元...原创 2020-04-21 16:09:30 · 164 阅读 · 0 评论 -
拿糖果___蓝桥算法提高
每日一刷(昨天也刷了,但提交正确率只有百分之三十,果然够垃圾)好了,说说今天的题,题目提示动归,但我感觉我只是用了递归。先贴题:就很简单的判断质数(记住1不是质数),然后直接按不大于根号N的最大质数拿,过于简单,直接贴代码:using namespace std;int sum=0;bool zhi(int n)//判断质数 { if(n==1) return false; fo...原创 2020-04-20 22:50:05 · 198 阅读 · 0 评论 -
蓝桥试题 历届试题 分糖果
每日一刷最近再认真学习递归(奈何还是没理解)所以这道题也是用的递归写法,日常贴题:通过数据就知道不会boom;这道题最主要的问题就是不能先加上上一个小朋友给的糖的数量之后,再分给下个小朋友。所以就建一个数组存一下上一个小朋友要给的糖就好了,因为是围成一个圈,所以存糖果数量的数组下标可以设为(i+1)%n。然后就很简单,代码如下:int n,arr[N],num=0,k[N]; void f...原创 2020-04-18 23:55:55 · 159 阅读 · 0 评论 -
最小公倍数
输入两个数,求两数最小公倍数int lcm(int x,int y){ int i=2,k=y; while(k%x!=0) { k=y*i; i++; } return k;} int main(){ int a,b; cin>>a>>b; cout<<lcm(a,b); return 0; }前提是数不要太大,不然就...原创 2020-04-17 21:34:25 · 223 阅读 · 0 评论 -
每日一刷——幂方分解
小垃圾的每日一刷全都是有思路但写不出,然后就问度娘了题目其实有提示,用递归来解首先按照题目给出的范围可知开到2的14次方足以,所以先定义一个数组,值为2的下标次方,然后就是写好递归出口,再确定括号和加号位置,好了,直接贴代码using namespace std;void fun(int n){ int a[]={1,2,4,8,16,32,64,128,256,512,1024,2...原创 2020-04-17 21:30:40 · 205 阅读 · 0 评论 -
最大公共子序列和__蓝桥
直接贴题可以直接两重循环直接求解,但会超时(呜呜呜我还是太垃圾了)然后就是参考了各位大佬的文章之后写的解法int main(){ int n,a[N]; int sum=0,max=-100000; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { sum=s...原创 2020-04-16 20:41:49 · 143 阅读 · 0 评论