LeetCode
刷题笔记
暮色_年华
这个作者很懒,什么都没留下…
展开
-
【蓝桥结果填空】:时间显示
1s=1000ms1 day=24hour本题考查取整和取余运算最后一天有多少毫秒(取余)->去掉无用的毫秒(取余)->最后一天有多少秒->hour->min->second->格式输出#include<bits/stdc++.h>using namespace std;int main(){ long long n; cin>>n; //最后一天中有多少秒 long long day_ms=n%(1..原创 2022-01-21 12:21:09 · 2924 阅读 · 0 评论 -
【动态规划笔记】:POJ 3176 树塔
给定一个数塔从开头走到最下面,求走过数字之和的最大值#include<bits/stdc++.h>using namespace std;int n;int a[400][400];int dp[400][400];int maxa(int i,int j){ if(dp[i][j]!=-1) { return dp[i][j]; } if(i==1&&j==1) { dp[1][1]=a[1][1]; return a.原创 2022-01-20 13:40:34 · 264 阅读 · 0 评论 -
蓝桥杯:BFS解决问题总结(九宫重排,跳蚱蜢,卡片交换)
BFS标志:初始状态经过演变到达目标状态,问最少经过几步如九宫重排问题跳蚱蜢问题:卡片交换问题:解题模板:不同题目的move函数和move函数的个数不同,其他都是相同的struct state{ string s; int level;}set<string>allstate;queue<state>q;string move(string s,int flag){str...原创 2022-01-18 16:15:45 · 3760 阅读 · 0 评论 -
蓝桥2017真题剪邮票
考点:利用next_permutation+映射 求n个元素的集合中选m个组合//数组的个数是集合中元素的个数,1的个数为选出元素的个数vector<int>a({0,0,...,1,1,...1});void f(vector<int>a){ for(int i=0;i<a.size();i++) { if(a==1) { //选F(i) } } }do{ f(a);//a通过f映射为集合元.原创 2022-01-18 00:28:48 · 205 阅读 · 0 评论 -
leetcode 并查集 547.省份数量/200岛屿数量
【数据结构和算法笔记】用并查集求解等价关系_m0_52043808的博客-CSDN博客模板:class UF{private: vector<int>father;//father数组 vector<int>rank;//秩 int count;//连通分支数public: UF()//构造函数初始化并查集,元素各自成营 { father.assign(n,0); rank.assign(n,0); for :每个元素 {原创 2022-01-16 17:58:09 · 117 阅读 · 0 评论 -
蓝桥杯2014c++真题:扑克序列(next_permutation)
string s=" xxxx";sort(s.begin(),s.end());do{//处理s }while(next_permutaion(s.begin(),s.end()));注意:必须先排序后才能用next_permutation#include<iostream>#include<string>#include<sstream>#include<algorithm>#include<unordered_m...原创 2022-01-15 22:39:09 · 737 阅读 · 0 评论 -
蓝桥c++2013真题:逆波兰表达式(代码填空题)
v1是对下值1 递归求逆波兰表达式则v2应是对值2 递归求逆波兰表达式所以应该找到值2开始的位置x+1+v1.n答案: v2 = evaluate(x+1+v1.n);原创 2022-01-15 11:10:29 · 127 阅读 · 0 评论 -
蓝桥c++2013真题:前缀判断(代码填空)
答案:*(needle++)!=*(haystack++)或者*needle++!=*haystack++代码填空复制到编辑器里运行母串haystack_start,子串needle_start母串的头指针haystack子串的头指针needle两个同时遍历并判断是否相等,不相等返回NULL如果needle越界说明子串比母串长,返回NULL否则返回母串的头指针...原创 2022-01-15 10:56:31 · 94 阅读 · 0 评论 -
蓝桥杯日期填空问题:高斯日记/星系炸弹
思路:excel辅助计算用1791年12月15日作为基准计算结果距离1791-12-15有8113-5343=2770天1791-12-15距离1792有16天2770-16=2754从1792-1-1算起一共有2754天我们知道2000年是闰年,1996年是闰年,用excel的自动扩充求出自1792开始的闰年结果在1798-1799直接结果从1799-1-1算起有197天,可以得出结果为1799-07-16第一次做题:12’ 通过...原创 2022-01-14 21:19:40 · 196 阅读 · 0 评论 -
1432: 【蓝桥杯】:剪格子(迷宫问题变体)
注意输入:m表示宽度,n表示高度(m表示列,n表示行)dfs:从左上角开始走迷宫,如果走过路径的和为SUM/2,记录走过数字个数求走过数字的最小值代码:#include<iostream>using namespace std;const int MAX=15;int n,m;int size,sum,now,ans=100;int map[MAX][MAX];//图作为全局变量 int vis[MAX][MAX];//防止走回头路 ,作为全局...原创 2021-12-16 21:39:21 · 1781 阅读 · 0 评论 -
【蓝桥杯】题目 1429: 兰顿蚂蚁
思路:模拟 #include<iostream> #include<vector> #include<string> using namespace std; int main() { int row,line; cin>>row; cin>>line; vector<vector<int>>mat(row,vector<int>(line,0)...原创 2021-12-15 23:57:29 · 2294 阅读 · 0 评论 -
蓝桥杯1427: -买不到的数目(百钱百鸡问题变体)
百钱白鸡问题:公鸡5钱一只,母鸡3钱一只,小鸡1钱3只。100钱买100只鸡,问公鸡,母鸡,小鸡各几只?问题实质是求不定方程的整数解(数论):a+b+c=100①5a+3b+c/3=100②思路:穷举法(暴力搜索)方程②可变形为15a+9b+c=300,这样做可以防止出现整数除问题]a的可能取值范围是[0,20],b的可能取值范围是[0,33],c的可能取值范围是[0,100]可以用三个for循环遍历abc判断①②是否都成立优化:当a,b确定时,c=100-a-b原创 2021-12-15 20:43:33 · 2227 阅读 · 0 评论 -
leetcode 35. 搜索插入位置(二分法搜索失败的情况)
35. 搜索插入位置思路:二分查找模板:如果查找成功,返回target在nums中的下标//二分查找模板//nums[0..n-1]为有序数组,target为目标int left=0;int right=n-1;while(left<=right){ if(nums[mid]==target) { return mid; } else if(nums[mid]>target) { right=mid-1; } .原创 2021-12-13 17:06:53 · 647 阅读 · 0 评论 -
leetcode 129. 求根节点到叶节点数字之和
129. 求根节点到叶节点数字之和思路:转换为求二叉树根节点到叶子节点所有路径问题vector<vector<int>>path(TreeNode *root);#求根节点root到叶子节点所有路径,存放在二维数组中 递归:(后序遍历)先求出左子树到叶子节点的所有路径,再求出右子树到叶子节点的所有路径最后把根节点加入左右子树的路径后伪代码if root==...原创 2021-12-12 10:55:49 · 191 阅读 · 0 评论 -
单调栈:leetcode 84. 柱状图中最大的矩形/85最大矩形
84. 柱状图中最大的矩形遍历数组,以每一个元素作为高,向左右两边拓展,遇到第一个比该元素小的位置停下图片源自leetcode力扣一.暴力解法(超时)遍历数组,以每一个元素作为高,向左右两边拓展,遇到第一个比该元素小的位置停下时间复杂度O(n*n)空间复杂度O(1)代码:class Solution {public: int largestRectangleArea(vector<int>& heights) {//最大面积,初...原创 2021-12-09 16:31:05 · 1104 阅读 · 0 评论 -
【leetcode刷题笔记】单调栈
求左边第一个比当前元素小的数代码:#include<iostream>using namespace std;#include<stack>int main(){ //定义单调栈st stack<int>st; //输入元素个数 int n; cin >> n; for (int i = 0; i < n; i++) {...原创 2021-12-08 20:32:23 · 354 阅读 · 0 评论 -
用c++实现一个插入,删除和随机访问都是O(1)的容器(剑指||30)
要求: 设计一个支持在平均时间复杂度 O(1)下,执行以下操作的数据结构:●insert(val): 当元素 val 不存在时返回 true,并向集合中插入该项,否则返回 false 。●remove(val):当元素 val 存在时返回 true,并从集合中移除该项,否则返回 false。●getRandom: 随机返回现有集合中的一项。每个元素应该有相同的概率被返回。思路:插入,删除时间复杂度为O(1)→哈希表 哈希表key存放元素值,val...原创 2021-12-06 23:05:41 · 1426 阅读 · 1 评论 -
LeetCode 172 阶乘后的0
172. 阶乘后的零分解质因子n=(2^m)*(3^n)*(5^p)*7^.....1个5和1个2可以配出一个0由于m远远大于p(偶数都可以拆出一个2),只要求p问题转换为n中5因子的个数:公式:n中5因子的个数:n/5+n/25+n/125+n/625+......class Solution {public: int trailingZeroes(int n) {//5因子的个数int res=0;//记得初始化//res=n/5+n/25+n/1.原创 2021-12-05 16:59:28 · 728 阅读 · 0 评论 -
LeetCode 73. 矩阵置零(两个标记变量)
73. 矩阵置零我们可以用矩阵的第一行和第一列作为两个标记数组,以达到 O(1)O(1) 的额外空间。但这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。class Solution {public: ..原创 2021-12-05 16:47:21 · 184 阅读 · 0 评论 -
Leetcode62. 不同路径
62. 不同路径dp[i][j]表示经过下标i,j的路径dp[0][0...n]=1dp[0...n][0]=1dp[i][j]=dp[i-1][j]+dp[i][j-1]class Solution {public: int uniquePaths(int m, int n) {vector<vector<int>>dp(m+1,vector<int>(n+1));for(int i=0;i<n;i++){dp[0.原创 2021-12-05 11:30:09 · 258 阅读 · 0 评论 -
面试题 01.09. 字符串轮转
面试题 01.09. 字符串轮转假设s1是xy, s2是yx, 要判断s1是否是s2翻转得到的,只要判断s1是否在s2+s2中解释:s2+s2=yxyx,假设s2不是s1翻转得到的,s2=y'x',s2+s2=y'x'y'x',s1就不在s2+s2中class Solution(object): def isFlipedString(self, s1, s2): """ :type s1: str :type s2: str ..原创 2021-12-04 16:11:40 · 72 阅读 · 0 评论 -
Leetcode445 两数相加||(单链表)
两数相加模板://n进制数相加int carry=0;int bit;int 数1,数2;point1指向数1的最低位,point2指向数2的最低位res;//结果while(point1不到最高位&&point2不到最高位){ bit=point1->val +point2->val+carry; if(bit>=n) { carry=1; 结果最后加入数(bit-n);...原创 2021-12-04 11:17:54 · 96 阅读 · 0 评论 -
leetcode 206 如何原地反转单链表?
206. 反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode...原创 2021-12-04 10:34:40 · 232 阅读 · 0 评论 -
Leetcode 680. 验证回文字符串 Ⅱ
680. 验证回文字符串 Ⅱ代码:class Solution {public://判断s【low,....high】是否是回文串 bool judge(string s,int low,int high) { while(low<=high) { if(s[low]!=s[high]) { return false; } .原创 2021-12-03 12:33:54 · 438 阅读 · 0 评论 -
leetcode 125. 验证回文串
125. 验证回文串思路:扫描字符串,如果是大写字母,ASCII码+32转为小写字母,如果是字母或者数字不用转,用双指针判断是否为回文串注意:对撞双指针 不忘写 r--;l++class Solution {public: bool isPalindrome(string s) { string res; for(int i=0;i<s.size();i++) { if(s[i]>='A'&&s[i]<...原创 2021-12-02 21:03:45 · 303 阅读 · 0 评论 -
LeetCode 525 连续数组/剑指 Offer II 011. 0 和 1 个数相同的子数组
题目链接:525. 连续数组思路:前缀和+哈希表由于「0和 1的数量相同」等价于「1的数量减去 0的数量等于 0」,我们可以将数组中的 0视作 -1,则原问题转换成「求最长的连续子数组,其元素和为 0]遍历nums,用sum维护当前sum,向map中查找是否存在sum,如果存在,更新长度最大值否则,map[sum]=i+1(由s[i]-s[j]=a[j+1]+...+a[i]推导)class Solution {public: int findMaxLen...原创 2021-12-01 23:34:23 · 225 阅读 · 0 评论 -
剑指 Offer II 010. 和为 k 的子数组
题目链接:剑指 Offer II 010. 和为 k 的子数组思路:前缀和+哈希表一次遍历前序和:可以方便的求出连续子数组的和思路:求出nums数组每项的前缀和sum[0],sum[1],.......,sum[n-1]找其中两个相减等于k的个数结果为sum[i]等于l的个数+两个相减等于k的个数(两个sum相减得到的连续自数组至少只能从a1开始计算,所以要单独讨论以a0开始的子数组的和)边遍历map边查找:(1)访问到当前元素,求map中是否存在要寻找的..原创 2021-12-01 20:59:19 · 256 阅读 · 0 评论 -
剑指 Offer II 002. 二进制加法
倒着遍历字符串,逐个对其相加,相加结果和2比较,如果大于2,要进行进位操作class Solution {public: string addBinary(string a, string b) {int carry=0;string res;int m=a.size()-1;int n=b.size()-1;//mn指向ab最后一个字符while(m>=0&n>=0){ int bit=a[m]-'0'+b[n]-'0'+carry; ...原创 2021-11-27 19:03:33 · 108 阅读 · 0 评论 -
剑指|| offer1整数除法
注意溢出:用减法代替除法用long long代替intclass Solution {public: int divide(long long a, long long b) { if(a/b<0)return a/b>INT_MIN?a/b:INT_MIN;if(a/b>0)return a/b>INT_MAX?INT_MAX:a/b;if(a==0)return 0;return 0; }};...原创 2021-11-27 18:22:32 · 161 阅读 · 0 评论 -
LeetCode 1035 不相交的线
题目链接:力扣问题转换为求最长公共子序列问题:代码:class Solution {public: int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>>dp(nums1.size()+1,vector<int>(nums2.size()+1,0));for(int i=1;i<=num...原创 2021-11-22 21:40:16 · 479 阅读 · 0 评论 -
LeetCode 647 回文子串
题目链接:力扣思路:动态规划dp[i][j]表示s下标[i:j]的子串是否是回文串,问题转化为只要遍历dp数组,统计true的个数确定边界情况:●当i=j时,dp[i][i]表示s下标i到i的子串,只有一个字符,一定是回文子串,所以i=j时,dp[i][i]为True●当j-i+1=2时,dp[i][j]表示s下标从i到i+1子串,只有两个字符,如果两个字符相等,是回文串状态转移方程:●当s【i】=s【j】,且dp【i+1】【j-1】为真,dp【i】【j】是回文●...原创 2021-11-21 23:18:33 · 71 阅读 · 0 评论 -
LeetCode 123买卖股票的时机 III
题目链接力扣一天结束时,可能有持股,可能未持股,可能卖出过1次,可能卖出过2次,也可能为卖出过定义状态转移数组dp【天数】【当前是否持股】【卖出的次数】动态规划:1.未持股,没卖出过股票:利润为0dp[i][0][0]=02.未持股,卖出过一次股票:可能是今天卖出,也可能是之前卖出dp[i][0][1]=max( dp[i-1][1][0]+prices[i] 昨天持股,且未卖出过股票 , dp[i-1][0][1] 昨天未持股,卖出过一次股...转载 2021-11-21 17:08:24 · 82 阅读 · 0 评论 -
LeetCode 701 二叉搜索树中的插入操作
题目链接:力扣插入一个数,就是先找到插入位置,然后进行插入操作。思路:递归递归函数声明: TreeNode* insertIntoBST(TreeNode* root, int val);递归出口:如果根节点不为空,val < root->val且root左子树为空,val建立节点插入到根节点的左子树如果根节点不为空,val > root->val且root右子树为空,val建立节点插入到根节点的右子树如果根节点为空,返回以val值...原创 2021-11-19 21:28:34 · 197 阅读 · 0 评论 -
分治法解决组合问题(递归)
s原创 2021-11-17 12:40:25 · 449 阅读 · 0 评论 -
LeetCode 530二叉搜索树的最小绝对差
题目链接:力扣思路:中序遍历二叉搜索树中序遍历是递增序列,要找最小绝对差,就是要找按照中序遍历,后一个数-前一个数的最小值class Solution {public: vector<int>res; void inorder(TreeNode *root) { if(root==NULL) { return ; } inorder(root->left); ..原创 2021-11-15 19:26:12 · 629 阅读 · 0 评论 -
LeetCode113. 路径总和||
力扣思路:递归:递归函数声明:vector<vector<int>>pathSum(TreeNode*root,inttargetSum)递归出口:(1)如果根节点为空,返回空二维数组vector<vector<int>>res;if(root==NULL){ return res;}(2)如果只有根节点,当根节点值为targetSum时,返回真 ,否则返回假if(!root->l...原创 2021-11-14 22:47:01 · 217 阅读 · 0 评论 -
LeetCode 112路径总和
力扣目录思路:1递归思路:1递归递归函数声明:boolhasPathSum(TreeNode*root,inttargetSum);递归出口:如果根节点为空, 返回假如果只有根节点, 当根节点值为targetsum时返回真,否则返回假递归体:考虑左子树和右子树的路径和递归判断左子树或右子树路径和是否可能为targetsum-root->val/** * Definition for a binary tree no...原创 2021-11-14 20:57:35 · 228 阅读 · 0 评论 -
LeetCode 116/117 填充每个节点下一个右侧指针
思路:层序遍历二叉树层序遍历模板以上可以总结出在对列中出队一个节点后,将该节点指向队列的front处代码/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} ...原创 2021-11-13 19:36:46 · 428 阅读 · 0 评论 -
LeetCode 38外观数列
力扣思路:打表由于n<=30,用数组记录每个数class Solution {public: string countAndSay(int n) { vector<string> arr = { "","1","11","21","1211","111221","312211","13112221","1113213211","31131211131221","1321131112311311221...原创 2021-11-12 20:18:06 · 225 阅读 · 0 评论 -
LeetCode 9 回文数
如果x<0,返回假如果x>0,逆序x,判断m与原来的x是否相等int temp=x;//用temp记录x的值//x在循环中值会变//反转x中数字int m=0;while(x>0){ m=m*10+x%10;x=x/10;}//m的值为逆序的值注意while中x>0,循环结束时x=0,表示x每位数字已经遍历完。...原创 2021-11-10 19:32:22 · 199 阅读 · 0 评论