leetcode
安之若醇
我要背着那重重的壳呀~一步一步地往上爬~~
展开
-
lleetcode_295. 数据流的中位数 大小顶堆
解题思路思路:大小顶堆不要对这两个priority_queue有什么误解一开始想得非常简单,sort嘛,然后取中间就好了,但是很明显是超时的,因为只要数据一多你就sort超时了(每次几乎要比较所有的数据)其实大小顶堆就是让你的操作空间一直在数据的中间.先搞一个大顶堆,这样数据是从小到大(大的是根)的.然后弄一个小顶堆,让数据还是从小到大(小的是根)这样的话两个根就把中间你需要操作的部分给夹出来了.大体就是这样,如果你往里插入数字的话只需要与两个根比较~~为了使"夹出来"的部分一直在中间,你原创 2021-08-27 09:12:52 · 111 阅读 · 0 评论 -
leetcode_1162.地图分析 (多源bfs)
题目链接解题思路也是第一次写多源BFS理论上大爆搜用bfs或dfs都可以,但是这个题的话明显把层次与最终答案联系起来了一开始在想多源bfs是个啥,其实就是把queue的大小作为每一层的判断依据,就可以判断有几个层了注意全是1 或者全不是要单独判断代码class Solution {public: int maxDistance(vector<vector<int>>& grid) { int dx[4]={-1,0,1,0},dy[原创 2021-08-20 15:51:11 · 93 阅读 · 0 评论 -
leetcode_1423. 可获得的最大点数 滑动窗口
解题思路滑动窗口不难写,还固定长度了现在的问题是,怎么用滑动窗口的?这步才是关键吧首先我们知道它取数字只能从两边取emmm,那其实很难去模拟但是,它中间那段是连续的鸭!那就是了,中间滑动取最小值就好了代码class Solution {public: int maxScore(vector<int>& cardPoints, int k) { int len=cardPoints.size(); int si=len-k;原创 2021-08-20 12:46:55 · 110 阅读 · 0 评论 -
leetcode_765. 情侣牵手 :并查集很简单,关键在于思路
解题思路情侣牵手?困难?我悟了!!这个题上来也是没有思路,后来看题解有分析说,如果有情侣掺和在一起看成一堆人的话,一共看看几堆,用len/2减并查集数目就可以了。其实并查集就需要初始化len/2,因为情侣相当于已经在一个集合里了。你可以将每一个数/2,这样每对情侣就一样了。代码class Solution {public: int father[80]; int findfather(int a){ if(father[a]==a){原创 2021-08-19 15:52:18 · 109 阅读 · 0 评论 -
778. 水位上升的泳池中游泳 二分加dfs
QAQ做出hard题来了,还挺快的QAQ,纪念一下~解题思路二分加dfs(丝毫没有剪枝还挺快的)不过后来考虑了一点点剪枝,就是找到路了赶紧给我回去!if(flag==1) return;快了四毫秒~~~~~有一个注意点:起始点需要判断一下大小测试样例:3 21 0代码class Solution {public: int n; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; int visited[53][原创 2021-08-19 09:20:47 · 103 阅读 · 0 评论 -
leetcode_132. 分割回文串 II 双dp
一开始把131的改了改(131的题解在这里呀)然后就是这样:dp先处理串,dfs爆搜但是131只有16的长度啊。。。。。class Solution {public: bool f[3000][3000]={0}; int ans=INT_MAX; int now_ans=0; void dfs(int begin,string s){ int l=s.length(); if(begin==l){ ans原创 2021-08-18 18:07:34 · 100 阅读 · 0 评论 -
leetcode_131. 分割回文串 dp先标记状态然后dfs爆搜
解题思路本来想错了想成i在左边耽误了一会时间,据说要输出所有方式的题肯定涉及爆搜,就看你搜了个啥了其实这个题你只需要枚举起始点(前缀)就可以比如:“abababa”a:爆搜bababaaba:爆搜:babaababa:爆搜ba…前面那个求回文串的方法注意要与回文子序列区分代码class Solution {public: vector<string> now_ans; vector<vector<string> > ans;原创 2021-08-18 15:32:26 · 83 阅读 · 0 评论 -
leetcode_552. 学生出勤记录 II
题面一开始想记忆化搜索,想过可不可以分长度,,,很明显不可以,因为长度的边界不好搞,就是那三个连续的L但是很明显感觉肯定是可以记忆的范围 1e5,很明显只能跑一遍,也就是说,这里其实在暗示你用长度作为一个维度。其实发现下一位可以上啥完全依赖于A的数量以及连续的L的个数那其实我们把这两个记录下来就好啊记得大佬曾说你不会的时候就升维,那就开一个三维吧但是连续的L 的个数可以说是很难往下推,于是思路戛然而止。。。翻了翻评论,发现说可以记录最后一位连续的L的个数1想想有道理,你一位一位推,然后可原创 2021-08-18 11:19:49 · 61 阅读 · 0 评论 -
一波背包问题的变形题库~~
41601背包的恰好能装满 问题,应该初始化其他全为一个不合法的数,dp[0]=0相当于价值为1,重量为nums[i]class Solution {public: bool canPartition(vector<int>& nums) { int sum=0; int len=nums.size(); sort(nums.begin(),nums.begin()+len); for(int i=0;i&l原创 2021-08-17 17:39:45 · 156 阅读 · 0 评论 -
1301. 最大得分的路径数目
这个几乎完完全全膜拜官方题解能想到那两个for循环,然后知道board[i][j] != 'X'才可以转移,但是感觉如果要再算一个路径数的话恐怕真的不太行,,,而且一个点对应两个值这个问题还确实第一次见的。using PII = pair<int, int>;class Solution {private: static constexpr int mod = (int)1e9 + 7;public: void update(vector<vector<原创 2021-08-17 16:26:02 · 104 阅读 · 0 评论 -
1575. 统计所有可行路径leetcode (dfs+记忆化搜索 转 dp)
题目链接这个题,先来一个裸dfs看看能骗几分:class Solution {public: long long num=0; void dfs(vector<int>& locations, int start,int pre, int finish, int fuel ){ if(fuel < 0){ return ; } if(start==finish){原创 2021-08-17 15:23:34 · 213 阅读 · 0 评论 -
dp刷题题库 leetcode
62class Solution {public: int uniquePaths(int m, int n) { int dp[102][102]; dp[0][0]=1; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(i>0 && j>0){ dp[i][j]=dp原创 2021-08-17 10:45:26 · 196 阅读 · 0 评论 -
526. 优美的排列
题目链接在某kerin的带领下,成功开始做每日一题放个大佬的链接kerin的博客好了,今天这个题一看数据范围:15!!!是不是瞬间想到打表!不不不,打表也得能算出来呀~~第一思路,先想到的就是next_permutation(不得不说,全排列yyds)冒着会超时的风险,我写下了代码,//头文件省略掉了// int num[30];// cin>>n;// for (int i = 1; i <= n; ++i) {// num[i]原创 2021-08-16 18:08:43 · 77 阅读 · 2 评论 -
576. 出界的路径数(DFS+记忆化搜索转dp)
576n年没做leetcode了QAQ,结果忽然发现某人居然做的题比我多了????(嘤嘤嘤),于是在这个阳光明媚的上午,我再一次打开了leetcode嘤嘤嘤,还是很佩服那些每天都能坚持做每日一题的dl 们呜呜,要是让我不做题光签到我可能都做不到QAQAQAQQAQQAQ好了,我们来看今天的dfs这个题你看一眼第一反应一定是dfs,直接一顿爆搜,虽然想想都超时。(都让你mod1e9+7了,还不超时,,,)翻了翻题解给了一个思路,当i,j,N一定时,其实步数是一样的.那好办,开一个三维数组呗(at原创 2021-08-15 11:20:59 · 111 阅读 · 0 评论