- 博客(108)
- 收藏
- 关注
原创 剑指 Offer 13. 机器人的运动范围
深搜+判断即可class Solution {public: bool check(int s,int k){ int sm=0; while(s){ sm+=s%10; s/=10; } return k>=sm; } int ans=0; int dir[4][2]={0,1,1,0,-1,0,0,-1}; int vis[110][110];
2022-03-05 11:16:05
228
原创 剑指 Offer 05. 替换空格
class Solution {public: string replaceSpace(string s) { string res; for(int i=0;i<s.length();i++){ if(s[i]==' ') res+="%20"; else res+=s[i]; } return res; }};
2022-03-05 10:57:37
207
原创 剑指 Offer 12. 矩阵中的路径
直接爆搜加回溯class Solution {public:bool f=0;int dir[4][2]={0,1,1,0,-1,0,0,-1}; void dfs(vector<vector<char> > & b,string &word,int x,int y,int d){ if(f) return ; if(d==word.length()){ f=1; retu
2022-03-05 10:53:15
206
原创 剑指 Offer 11. 旋转数组的最小数字
题解请戳class Solution {public: int minArray(vector<int>& numbers) { int l=0,r=numbers.size()-1; while(l<r){ int mid=(l+r)>>1; if(numbers[mid]<numbers[r]) r=mid; else if(numbers[mi
2022-03-04 11:46:29
154
原创 剑指 Offer 04. 二维数组中的查找
每一列递增,每一行递增在每一行中二分即可 bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.size() == 0 || matrix[0].size() == 0) return false; for(auto &it:matrix){ int l=0,r=it.size()-1;
2022-03-04 11:20:11
94
原创 剑指 Offer 03. 数组中重复的数字
因为所有数字都在 0~n-1 的范围内,且正好有n个数字,也就是说每个数字都可以放在自己大小所对应的位置上因此我们可以直接遍历数组,将数字放在他们对应的位置上,如果发现对应位置被与自己相同的数字占了就说明有重复数字class Solution {public: int findRepeatNumber(vector<int>& nums) { for(int i=0;i<nums.size();i++){ while(nums
2022-03-04 10:54:19
90
原创 剑指 Offer 30. 包含min函数的栈
因为栈满足的是先入后出,因此, 我们假设有A入栈了,然后另外一个比A大的数B也入栈,考虑一下,在A出栈之前,调用min()函数返回值都必不可能是B,也就是说,对于比当前最小值大的数,我们没必要记录下来,基于这个结论,我们可以构造一个辅助栈s2,单调递减class MinStack {public: /** initialize your data structure here. */ stack<int> s1,s2; MinStack() {} v
2022-03-03 09:06:42
92
原创 剑指 Offer 09. 用两个栈实现队列
思路: 维护两个栈A,B, 其中A栈用来入队,B栈用来出队,入队时,直接push到A栈,出队时,考虑B.size(),如果B栈为空,则将A出栈,不断push到B,若A栈也为空,则说明当前队内无元素class CQueue {public:stack<int> s1,s2; CQueue() {} void appendTail(int value) { s1.push(value); } int deleteHead()
2022-03-03 08:54:06
88
原创 剑指 Offer II 010. 和为 k 的子数组
首先写一个最暴力的算法 int subarraySum(vector<int>& nums, int k) { int n=nums.size(); int ans=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ int sm=0; for(int k=i;k<=j;k++){
2022-03-03 08:39:12
148
原创 力扣 三数之和
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(),nums.end()); // 双指针法 vector<vector<int> > res; for(int i=0;i<nums.size();){ i
2022-03-02 22:17:12
90
原创 LeetCode两数之和
不难写出一个o(n²)的解法 vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; for(int i=0;i<nums.size();i++){ for(int j=i+1;j<nums.size();j++){ if(nums[i]+nums[j]==target){
2022-03-02 21:18:37
234
原创 表达式求值
表达式求值模板代码#include<iostream>#include<stack>#include<map>#include<unordered_map>using namespace std;unordered_map<char,int> priority;stack<int> nums;stack<int> op;string s;void eval(){ int a=nums.top(
2022-01-26 17:57:38
764
原创 前缀和+离散化
题目链接:https://www.acwing.com/problem/content/1989/将原题抽象为:找到数轴上计数大于等于2的点的个数代码如下:重点在于如何通过差分数组mp倒推原数组#include<iostream>#include<map>using namespace std;#define ll long longmap<ll,ll> mp;void add(int l,int r){ mp[l]++; mp[r+1
2022-01-24 16:39:01
474
原创 计算两点间次短距离
题目来源:https://leetcode-cn.com/problems/second-minimum-time-to-reach-destination/思路: 用两个距离数组,记录出发点到各点的距离其中dis[i][0] 记录最短距离,dis[i][1]记录(严格)次短距离同时维护dis[i][0]和dis[i][1]即可如何维护?我们从队列中取到一个点时,先判断他是否已经计算出次短距离了,如果是就直接抛弃, 然后判断如果他已经被访问过一次(既,已经计算出最短距离) , 判断它的最短距离
2022-01-24 10:54:16
611
原创 Mysql 分页查询以及效率问题
MySQL分页查询语法如下:select *from userLIMIT X,Y上述代码表示,选出表中x+1 到 x+y行的数据但实际上,mysql执行的本质是取出从第一行到第x+y行的全部内容,然后丢弃前x行的内容,因此在偏移量(x)极大时,速度会非常慢。...
2021-12-21 23:06:04
613
原创 关于maven项目中的pom的resources标签说明
maven项目中的pom的resources标签说明resources标签指明了maven项目的加载方式当我们不配置它是,默认是这样的:<resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering&
2021-12-15 22:08:07
1945
原创 21/12/14 力扣每日一题
https://leetcode-cn.com/problems/course-schedule-iii/class Solution {public: static bool cmp(vector<int> &a,vector<int> &b){ return a[1]<b[1]; } int scheduleCourse(vector<vector<int>>& courses) {
2021-12-14 10:23:45
1090
原创 力扣270场周赛: 树上节点的共同祖先-记录欧拉路径
欧拉路径的记录1.直接枚举class Solution {public: vector<int> findEvenNumbers(vector<int>& d) { // 从给定的所有数字中取出三位偶数,按递增顺序排列 set<int> ans; for(int i=0;i<d.size();i++) { if(d[i]==0) continue;
2021-12-05 14:10:25
180
原创 ACWing例题
数组中第k小的数:https://www.acwing.com/problem/content/submission/code_detail/9193612/主要思路:我们采用类似快排的算法,每次给函数指定一个起点l和终点r,我们选取一个哨兵(a[l]),然后进行快排,将它放在合适的位置上,使得它左边的数都比他小,右边的数都比他大。 然后我们判断k与a[l]的位置关系,选择递归处理左半部分/右半部分即可。每次将数组分半,因此复杂度=(n/2+n/4+n/8…)=2n#include<iost
2021-12-04 11:55:01
396
原创 归并排序思想,以及代码实现
归并排序将区间不断二等分,二等分…然后一个接一个合并假设merge_sort(int a[],int l,int r)为 此次划分的区间为l到r,如何继续划分以及排序的问题代码如下:int a[N],temp[N];void merge_sort(int a[],int l,int r){ if(l>=r) return ; int mid=l+r>>1; // 划分区间,使得l到mid有序,mid+1到r有序 merge_sort(a,l,mid); m
2021-12-02 11:11:15
546
原创 快速排序思想以及代码实现
快速排序基于分治算法算法步骤:确定分界点x移动数组内的元素,让<=x的数据放在 x的左边,>=x的数据放在x的右边 (记得要将x放在中间)递归去处理x的左半部分和右半部分思想的C++简单实现:void quick_sort(int a[],int l,int r){ if(l+1>=r) return ; vector<int> left,right,eq; for(int i=l;i<r;i++){ if(a[i]>a[l]){
2021-12-01 23:00:19
107
原创 力扣:优先队列合并K个升序链表以及衍生
优先队列合并K个升序链表题目:https://leetcode-cn.com/problems/merge-k-sorted-lists/代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x)
2021-11-29 11:44:21
202
原创 力扣268周周赛
力扣268周周赛1.https://leetcode-cn.com/problems/two-furthest-houses-with-different-colors/数据范围这么小,直接暴力:class Solution {public: int ans=-1; int maxDistance(vector<int>& colors) { for(int i=0;i<colors.size();i++){ fo
2021-11-21 20:25:20
480
原创 c++中map的特性
c++中map的特性刚刚在力扣做题:https://leetcode-cn.com/problems/longest-harmonious-subsequence/wa代码是这样的:class Solution {public:unordered_map<int,int> mp; int findLHS(vector<int>& nums) { /* 最大最小差别不超过1 既我们可以用哈希表统计出所有取值
2021-11-20 00:22:18
576
原创 蓝桥杯中的dp例题
题目:http://lx.lanqiao.cn/problem.page?gpid=T2893思路都在代码里:#include<iostream>#include<cmath>#define N 100001using namespace std;int dp[101][N]; //所有砝码质量始终不会超过100010,故可以用dp[i][j]=1表示前i-1个物品可以测量出质量j,反之则不可以 int w[101];int main(){ int
2021-11-18 19:56:08
272
原创 算法比赛的BFS例题和模板
题目:[蓝桥杯2015决赛]穿越雷区http://oj.ecustacm.cn/problem.php?id=1266AC代码,思路都在注释里#include<iostream>#include<vector>#include<queue>using namespace std;int dir[][2]={0,1,0,-1,1,0,-1,0}; //定义了四个方向 struct node{ int x,y; //记录当前位置的坐标 int v;
2021-11-18 16:54:17
188
1
原创 深度优先搜索DFS例题和模板
题目来源:[蓝桥杯2015初赛]牌型种数http://oj.ecustacm.cn/problem.php?id=1253AC代码: 思路都在注释里#include<iostream>using namespace std;int ans=0;void dfs(int k,int n){ //k为当前将要拿哪张牌(注意是将要拿,而不是已经拿了),k取1-13 // n为当前手里有多少张牌,n取1-13 if(k==14&&n==13) {
2021-11-18 16:15:46
182
原创 在算法比赛中,如何判断自己会不会超时?
在算法比赛中,如何判断自己会不会超时?先看题目:http://oj.ecustacm.cn/problem.php?id=1026输入的数字最大为N=100000(10的五次方)如果我们采用最简单的冒泡排序o(n²),最终CPU将执行N*N≈10的10次方左右的运算次数,而一般的测评机一秒钟可以执行5X10的8次方左右条指令,因此该算法将运行20S左右,必然超时。因此采用快速排序,复杂度为o(n*log(n)),即可通过。...
2021-11-18 15:13:53
1246
原创 算法竞赛中有多组输入应该如何处理
数值统计Description统计给定的n个数中正数的个数Input输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;Output对于每组输入数据,输出一行a,表示给定的数据正数的个数。Sample Input3 1 0 -22 -1 -1Sample Output10#include<iostream>#define N 101int arr[N];using namespace std;
2021-11-18 14:50:16
470
原创 力扣 318和位运算集合
学到了位运算的操作:将集合映射到一个数字上,无论是比较还是入集合/出集合都很方便!设s1,s2为集合:将第i个项目入集合s1:s1|=(1<<i) // 无论i之前是否在集合中s1+=(1<<i) // 一定要保证i之前不在集合中,不然会出错将第i个项目出集合s1-=(1<<i) //一定要保证i之前在集合中比较两个集合是否相同s1==s2解决问题的代码:class Solution {public: int maxProduct(v
2021-11-17 09:16:12
92
原创 记一次Base64编码的应用
Base64编码先来说一下我这次的业务需求,我们这次的项目是: 用户在浏览器的画板上绘图,然后在鼠标松开的时候,前端需要记录用户的笔迹,即保存用户画好的图,传给后端,然后后端将数据解码,传递给机器学习模型,机器学习模型根据图片找出最匹配用户图片的图片,反馈索引给用户因为机器学习模型的输入只要求是黑白图,因此前端传值可以传一个比特流过来(将0视为白色,1视为黑色),后端再根据比特流构图即可现在需要解决以下问题如何将01字符串转为比特流(本质上是把8个比特位转为一个char型变量)比特流如何进行B
2021-11-15 00:51:22
1677
原创 力扣 375
375. 猜数字大小 IIhttps://leetcode-cn.com/problems/guess-number-higher-or-lower-ii/题目的要求是: 求出诸如此类的树的所有子树的最大权值中的最小值class Solution {public:// 200 int dp[201][201]; int get(int i,int j){ //记为从i->j的猜出所有情况的最少消耗 if(i>=j) return 0;
2021-11-12 12:47:41
254
原创 CSP 2020-9
1.称监测点查询#include<iostream>#include<algorithm>using namespace std;#define ll long longll px,py;#define N 210struct node{ ll x,y,p; bool operator<(const node &nd)const{ ll dis1=(this->x-px)*(this->x-px)+(this->y-py)*(thi
2021-11-05 12:08:41
137
原创 CSP 2020-06
1.线性分类器设点的坐标为(x0,y0)直线坐标为A+BX+CY=0则将点坐标代入直线方程,结果若为负则在该直线下方,反之在上方。很重要的公式!!#include<iostream>using namespace std;#define N 1010#define ll long longll x[N],y[N],tp[N]; //-1代表a,1代表b ll res[N];int n,m;int main(){ cin>>n>>m; int
2021-11-04 20:19:25
107
原创 CSP 2019-12
1.报数看注释即可:#include<iostream>#include<cstring>using namespace std;int is_7(int x){ if(x%7==0) return 1; while(x){ if(x%10==7) return 1; x/=10; } return 0;}int n; //记录当前报了多少个数字int t;//记录当前报到了哪个数字, t不一定等于nint pass[4];int main(){
2021-11-03 13:56:35
95
原创 CSP 2019-9
1.小明种苹果#include<iostream>#include<vector>#include<cstring>using namespace std;#define ll long longll n,m,t=0,k,p,tp;int main(){ cin>>n>>m; for(int i=0;i<n;i++){ ll now,sum=0; cin>>now; for(int j=0;j<
2021-10-30 23:02:57
98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人