自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Nacos作为配置中心

nacos的应用

2022-09-01 14:17:28 118 1

原创 微服务、分布式、集群的概念

微服务、分布式、集群的理解

2022-09-01 12:10:58 158

原创 初探dynamic planning

一个LeetCode的题目,要求找到从一个图的左上方到达右下角的路径一共有几条。要明确第一点机器人只能从左往右从上往下走这样也就明确了一点:到达某个位置只能从上面来或者从左边来,那么到达该位置的总的路径数就是到达该位置左边的路径的树目和到达该位置右边的树目的总和(因为没有别的选择了),因此可以写出函数f(i,j)=f(i-1.j)+f(i,j-1),又有要到达最上面的那一行或者是最前面的那一列都只能顺着走不能掉头,使用到达第一行第一列的任意一个位置的路径都是1,先把它们初始化之后再遍历二维数组,每一个位置.

2021-10-13 18:47:05 169

原创 深度优先搜索实现回溯算法

回溯算法用于搜索一个问题的所有解,通过深度优先遍历的思想实现。回溯算法本质上是一种遍历算法,它可以搜索到解决问题的所有方案,时间复杂度很高。搜索的方法就是按顺序枚举出每一种可能出现的情况,已经选择了的在当前的这一次搜索中就不能出现,这样就能实现不丢不重。如题:要找出所有不重复的组合,一个数可以使用若干次,这就要用到回溯法把所有可能的搜索出来,使用深度优先搜索+递归的思想,找到底了再回去。【2,2,3】【3,2,2】其实是一种所以在搜索的时候一旦前面的搜索完毕了后面在搜索的时候就不能再考虑前面的数,这就

2021-10-02 15:26:48 270

原创 记录一个队列在算法题中的应用

如图要将输入的字符串对应的电话号码上的英文的全部组合进行输出,可以利用队列先进先出的思想,每次将队列中的第一个字符串移除出,用它和新来的字符串进行组合,得到新的组合后再将现在组合好的字符串重新添加到集合当中。1.首先往集合中添加一个空的字符串,第一次有一个进来,拿空的串和新的字母直接进行拼接,依次的往后加到集合;2.此后的每一次都是拿到头部和新来的组合以后放到尾部,不断操作最终得到完整的组合。class Solution { public List<String> letterC.

2021-09-25 14:49:41 62

原创 双指针解决最大容器问题

首先要明确,要求的容积等于两根板之间的距离乘以两根板之间较短那根板的长度,很容易的能想到遍历,但是两层遍历会导致时间复杂度过高,所以用双指针的思路来解决问题,首先使两个指针各指向数组的两端,并求得此时的面积,此后要更新指针的指向;这个地方是最精彩的部分,在移动指针的时候我们只需将短的那个板向内移动,为什么可以这样做?不会有遗漏吗?这是因为移动长板子的话只会使得容积变小,因此我们移动短的板子的话其实变相的在排除掉一些不可能作为最大容积的数据,这样一来时间复杂度就大大的降低了。并且也不会遗漏,这是一种排除.

2021-09-24 14:15:01 84

原创 滑动窗口算法

力扣上的一个题:求一个字符串中最大不重复子段的长度。1.定义变量left保存左窗口的边界,当前i-left就是窗口的长度。思路就是一边遍历一边去更新窗口的边界值。在这里插入代码片`public int lengthOfLongestSubstring(String s) { HashMap<Character, Integer> map = new HashMap<>(); int maxLen = 0;//用于记录最大不重复子串的长度 .

2021-09-19 13:09:54 84

原创 矩阵置0算法

要把二维数组中0元素所在的行和列都置为0,假如直接在遍历的时候就将其置为0,那么后面再遍历的时候就会将一些不该置为0的也置成了0,所以我们这里再建一个和原二维数组一样大的标记二维数组,这个数组就用来记录该变成0的行和列,记录完了之后再次遍历这个新的标记数组,将打了标记的地方置为0即可class Solution { public void setZeroes(int[][] matrix) { int a=matrix.length , b= matrix[0].length;.

2021-09-15 09:37:46 435

原创 一个有趣的算法题

一个力扣的算法题,判断行和列以及每一个九宫格内有没有重复的数据,有就返回false,没有的话返回一个true,常规的遍历好多次的话也能解出来但是没必要。这里遍历一次,并创建一个布尔类型的二维数组,行号用来保存数独中的行或者列,列号用于保存当前遍历到的值,这样的话每次遍历到行中或者列中重复的元素就可以一下子就锁定到,另外要注意每一个九宫格的序号可以用(i/3)*3+j/3来表示,这样一次遍历就可以解决问题,但开辟了二维数组空间相应的增大了,用空间换时间的做法。class Solution { pu.

2021-09-15 09:10:20 66

原创 排序-快排

排序思想:分治实现步骤:2.1.随机选取一个数作为分界点2.2.调整区间,使得在分界点左边的数小于等于分界点,在分界点右边的数大于等于分 界点(难点重点)单开两个数组,完了把要排序的数组分别以大于分界点和小于分界点放到两个数组中,再把两个数组放回到原来的数组就实现了快排2.3.将分界点两边的数分别递归进行排序#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int..

2021-08-16 13:06:33 59

原创 CSP第二题公共钥匙盒

这题算法实在经典:先用1-N个数组元素保存钥匙,1-N bool型元素保存某号钥匙是否到了要还的时候了,1-K个结构体数组元素来保存老师的信息。利用时间来判断某一个时刻该还的和该借的,当某一个时刻要还的时候先遍历一遍,将要还的钥匙的编号打上标记,也就是使其为TRUE,这时候再从小遍历钥匙数组,是0的地方就直接插入进去,这样又保证了先从小的编号处开始还。借钥匙是将这个老师所需要的钥找到后使该位置的元素为0即可。从时刻来操作的话又使得每次实现了先还后借的需求。#include <iostream&g.

2021-03-24 10:09:30 132

原创 CSP第二题消除类游戏

思路:定义两个数组,其中一个用来保存棋盘信息,另一个用来作为新的位置标记,这个思路很有用,一个数组存信息一个数组做位置标记。两番遍历数组,第一次是横着遍历,为了使横排连着三个相等的位置被记录,这个时候就使列++之后再使行++,还有就是要注意列数遍历到n-2个位置即可因为后面还要加的。找连行相等也是同理,但是现在是使行先++完了再使列++,也要注意行只能到倒数第二行,因为还要加二。#include <iostream>using namespace std;int main(){ in.

2021-03-24 10:04:09 62

原创 CSP第二题窗口

这是一个较难的题目。题意分析:输入n个窗口m个鼠标落下的坐标,若鼠标落在了几个窗口上,那么优先输出位于上方的窗口,重叠是指几个窗口彼此压在一起,这样的话先输入的窗口反而会在最下面,输出了在上方的窗口后,要将该窗口移到最上层来。思路分析:由于坐标杂,因此用结构体类型数据分别保存鼠标击点以及窗口的信息,关键要建立先键入的窗口反而在下面的这种映射关系。于是用一个int型数组将先输入的反而设置到最大的序号。将点到的窗口移到最上层也是只需调整这个序号数组即可。#include <iostream>.

2021-03-24 09:57:50 357

原创 CSP第二题ISBN号码

使用c++字符串容器,直接将输入存到字符串容器后,通过前9位数据求sum,但求的时候要注意因为字符串容器中的数据是字符变量因此要减去’0’;之后直接sum%11,结果直接给到char c,若c等于10,那就将c赋值为X否则c=c+’0’;然后将字符串最后一位与c比较,若相同则输出Right,若不同直接将c给最后一个元素。#include <iostream>#include <string>using namespace std;int main(){ string s;.

2021-03-24 09:53:20 85

原创 2021-03-24

这个题非常的简单,题意有点拐弯抹角,关键要理解题意:学生的分数是score,重要程度是w,每次将键入的w和score乘起来后相加求累加的和,这里这个ReLU函数实际上就是烟雾弹,意思就是若一个数比和0比大小谁大就返回谁。#include <iostream>#include <math.h> using namespace std;int ReLU(int x){ if(x>0){ return x; }else{ return 0; }}int .

2021-03-24 09:47:11 69

原创 CSP第一题线性分类器

这个题的难度不小,先理清题意:输入n个点,其中每个点都属于A类或者B类。再输入m组数据,是方程的参数,这组数据可以确定一条直线,若直线可以将分属于不同类别的点完全的分隔开,那么就输出yes,否则输出no。据此题意一点点实现:首先是如何将点的数据保存下来,因为分属于不同的类别的点要将其分离开所有使用字符变量接收键入的类别数据,而后判断之,分别将其归入不同的数组。还有一个问题,一个点的坐标是两个,故一共要开四个数组分别保存数据。现在解决第二个问题,键入三组数据,如何判断是不是将AB组数据分开了呢,只需判断将x

2021-03-24 09:45:58 157

原创 CSP第一题跳一跳

问题实际上意思是这样的:遇到1就加一分,不论是连续第几个1。遇到2的话就有规矩了,遇到第一次2就加两分,遇到连续的第二次加四分……以此类推。遇到0就结束。因此创建数组接收输入的数,没有指定几个,但0肯定是末尾,所有设最大的结束标志是i=30,而后再键入数据是0时立即跳出循环。故序号0-i都是有数据的。第二个循环用来遍历输入的数据,遇到0直接结束,遇到1加一分并将flag归为0,因为flag代表的就是这是第几个连续的2,一旦有了1,那么2的连续次数就归零。一旦遇到2先把flag+1,再在原先的基础上+f.

2021-03-24 09:39:18 125

原创 CSP第一题找出相差最小的两个数的绝对值

求一组数据中最小的差值,即遍历两次数组即可,第二轮循环在第一轮的下一个元素开始,并求两个值之间差的绝对值,若小于min就将其赋给min,这样循环过后min的值一定是数据间最小的差值。#include <iostream>#include <math.h>using namespace std;int main(){ int m,min=10000,i,a[1000],j,temp; cin>>m; for(i=0;i<m;i++){ cin>

2021-03-24 09:30:53 127

原创 CCF第十二次第一题:打酱油

问一定金额的钱最多可以打多少酱油,而题意中打50块钱的送得最多,打30块钱的次之,故问题转化为优先将钱分成最多的50块钱(money/50),分完以后再将剩下的钱分成尽可能多的30,最后再用剩下的去打。#include <iostream>using namespace std;int main(){ int m,fiveTen,threeTen,ten,num; cin>>m; fiveTen=m/50; threeTen=(m-fiveTen*50)/30; te

2021-03-19 09:59:32 93

原创 CSP第十一次第一题:分蛋糕

思路:定义一个变量来保存一个小朋友分到的蛋糕,内循环当分到的蛋糕达到规定的值就跳出,然后判断外面循环,外循环跳出的条件是所有的蛋糕分完了,也就是数组遍历完了,当然,到数组遍历完了之后内循环也要跳出,所有在跳出内循环的时候要判断分到的蛋糕是不是大于0,只要比0大就说明多一个小朋友分到了蛋糕。*******一定要注意跳出内循环以后将小朋友人数加一以后不要忘记将保存蛋糕的变量清零。不然会死循环出不来。代码如下:#include <iostream>using namespace std;in

2021-03-19 09:57:53 194

原创 CSP第十次第一题:寻找中间数

题意:找间值(比自己大的数的个数和比自己小的值的个数相等的话那么这个值就是中间值)。思路:定义两个变量分别用来保存比自己大的数的数目和比自己小的数的数目。两个循环,第一个循环拿到需要去判断的数,第二个循环用来依次用数和它对比。当所有的数都与该数对比完后,两个变量的值相等那它就是中间数,一旦得到中间数就不进行下面的操作了,不然可能得到重复的中间数。直接break;****值得注意的是每一轮比较完了以后一定要记得将保存大的数和小的数的变量归零。#include <iostream>using

2021-03-19 09:51:58 344

原创 CSP第九次第一题:股票最大波动

要求波动最大的值,也就是求某一个值的后一个数和自己相差的绝对值,找相邻数绝对值的最大值即可。#include <iostream>#include <math.h>using namespace std;int main(){ int m,i,max=0,a[1000]; cin>>m; for(i=0;i<m;i++){ cin>>a[i]; } for(i=0;i<m-1;i++){ if((abs(a[i]-a[i+

2021-03-19 09:44:34 118

原创 CSP第八次第一题:求折点个数

输入一组数据求折点个数,观察发现折点是指前一个数据比它大后一个数据也比它大,或者前一个数据比它小,后一个数据也比它小的数,因此直接将数据存入数组后用if判断该数是否满足上述条件即可。值得注意的是:遍历数组开始时的数肯定是数组里面的第二个数,这样i-1才不会出现问题,还有遍历的最后一个数是数组的倒数第二个数,只有这样i+1才不会出现问题。代码如下:#include <iostream>using namespace std;int main(){ int m,i,sum=0; cin&

2021-03-19 09:42:39 130

原创 CSP第七次第一题:数位之和

非常简单的题目,直接取位数相加即可;#include <iostream>using namespace std;int main(){ long a; cin>>a; int tenBi=a/1000000000; int bi=(a-tenBi*1000000000)/100000000; int thWan=(a-tenBi*1000000000-bi*100000000)/10000000; int huWan=(a-tenBi*1000000000-bi*

2021-03-19 09:40:55 141

原创 CSP第六次第一题

要求一串数中有几段数列,而相同的算一段,那么直接当一个数和它下一个数不同时使sum++就行了。如果和它下一个数相同,那就什么也不做继续循环continue。#include <iostream>using namespace std;int main(){ int a[1000],m,i,sum=0; cin>>m; for(i=0;i<m;i++){ cin>>a[i]; } for(i=0;i<m;i++){ if(a[i]!=a[

2021-03-19 09:39:26 36

原创 CSP第五次第一题:图像旋转

做这种题显然是使用二维数组将输入的数据存储进来,关键在于找到规律后将数据存储到另一个数组后进行输出即可。我是先将矩阵逆过来后发现只需再将行的值变一下就行了。#include <iostream>using namespace std;int main(){ int n,m,i,j; cin>>n>>m; int a[n+1][m+1],b[m+1][n+1],c[m+1][n+1],temp=m+1; for(i=1;i<=n;i++){ for(

2021-03-19 09:37:03 157

原创 CCF第四次第一题:进出图书馆次数

两种方法都很简单,第一种方法是直接将学生编号作为数组的序号然后对应序号的值++,再将每一次的值直接输出即可。第二种和第一种思路差不多,不过第二种是将每次该人进入图书馆的次数单独放一个数组之后再输出。//方法1:#include <iostream>using namespace std;int main(){ int temp,m,sum=0,a[1000]={0},i; cin>>m; for(i=0;i<m;i++){ cin>>temp;

2021-03-19 09:34:28 114

原创 CSP2020年9月第一题检测点

题意:输入m个检测点、以及一个人的位置坐标,而后计算出离这个人最近的三个监测点,若有距离相同的点,那就先输出序号小的点,并输出其序号。方法一思路: 要比较的是距离,若距离相同还要比较它的序号,因此不妨将二者存到一个结构体变量中,也即一个结构体反映一个监测点的信息,若干个结构体,所以用容器vector来装。完了以后直接调用sort函数对容器进行排序即可。要注意sort函数里面的cmp参数也就是排序规则这个参数的写法。#include <vector>#include <iostrea

2021-03-19 09:26:26 297

原创 CCF第三次第一题:

判断一组数据中有没有相邻数对,也就是一对数的相差为1,直接像上一题一样遍历之后判断后面的数有没有和这个数相减绝对值为1的即可。Fabs、abs皆可。但一定要注意的一个点是sum必须初始化为0,不然就会失败。因此,在以后的编程中一个值,或者是数组一旦创建我们都要习惯性的为其赋初值。#include <iostream>#include <math.h>using namespace std;int main(){ int m,i,j,a[1000]={0},temp,num.

2021-03-18 21:07:32 45

原创 CSP第二次第一题

题设说的保证输入的数不重复,其实不用去写什么判断,也不用使用set,方法1的思路:用set容器将数据输入,再用迭代器对集合实现遍历,遍历的同时去寻找没一个数的相反数,找不到就返回st.end(),因为找不到,迭代器就停在了最后面;而我一开始试图使用迭代器接收返回值,然后再拿到此迭代器的值,判断它是不是为0,这样是错误的,因为就算找不到某个值,那我通过迭代器拿到的值也有可能不是0。故由此要记住,利用find方法寻找某个值,找不到返回的是it.end();找到了那就是不等于it.end()。#include

2021-03-18 21:05:45 70

原创 CSP第一次第一题出现次数最多的数

此方法要开大数组,直接将输入的值作为数组的序号,而将它出现的次数作为这个序号所对应的值。这种思路用到几次了,将看似目的的值反作为序号,看似序号的值却作为序号对应的值。而后只需遍历这个大数组(尽管大多数位置为0,也要全部遍历),找出最大的那个值赋给max,第二次循环从0开始遍历数组,一旦遇到max就输出此时的序号,此时的序号也就正好是输入次数最多的那个数,而且由于从小的数开始遍历,因此输出的肯定是较小的序号。#include <iostream>using namespace std;in

2021-03-18 21:00:42 137

原创 c语言实现数据库

#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define LEN sizeof(struct student)struct student *creat();struct student *del(struct student *head,int num);struct student *insert(struct student *head,struct student *stu_2);

2021-03-02 10:51:45 3147

原创 将结构体数组数据批量存入磁盘及读取

//键入4个学生数据并保存在磁盘文件当中#include<stdio.h>#include<stdlib.h>#define SIZE 4struct student_type{ char name[10]; int num; int age; char addr[15];}stud[SIZE];void save(){ FILE *fp; int i; if((fp=fopen("stu_list","wb"))==NULL){ printf("文件

2021-01-31 13:40:14 755 1

原创 将磁盘上的文件复制到另一个文件

//将一个磁盘中的文件复制到另一个磁盘#include<stdio.h>#include<stdlib.h>int main(){ FILE *in,*out; char ch,infile[10],outfile[10]; printf("输入原文件名"); scanf("%s",infile); printf("请输入复制文件名"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL){ printf

2021-01-31 13:34:58 275

原创 共用体的运用

//共用体的运用#include<stdio.h> struct{ int num; char name[10]; char sex; char job; union{ int banji; char position[10]; }category;}person[2];int main(){ int i; for(i=0;i<2;i++){ scanf("%d %s %c %c",&person[i].num,&person[i].na

2021-01-28 14:16:27 165

原创 链表的操作综合

//建立链表的算法#include<stdio.h>#include<malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{ long num; float score; struct student *next;}; int n;int main(){ struct student* creat(); struct student *p1,*p2,*p3,*p4,*p

2021-01-28 14:12:34 113 2

原创 删除链表单元的函数

struct student* del(struct student *head,long num){ struct student *p1,*p2; if(head==NULL){ printf("是空的"); return head; } p1=head; while(num!=p1->num&&p1->next!=NULL){ p2=p1; p1=p1->next; } if(num==p1->num){ if(p1==head

2021-01-28 13:25:24 106

原创 用malloc函数创建链表后并输出

//建立链表的算法#include<stdio.h>#include<malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{ long num; float score; struct student *next;}; int n;int main(){ struct student* creat(); struct student *p; p = creat();

2021-01-27 15:55:19 596

原创 结构体相关概念及应用

#include<stdio.h>int main(){ struct student{ long int num; char name[20]; char sex; char addr[20]; }st1={10101,"Li Lin",'M',"panzhoushi"}; printf("No.%ld\nname:%s\n%c\n%s\n",st1.num,st1.name,st1.sex,st1.addr);}要注意的细节:结构体的定义可以在函数外,作为

2021-01-27 14:00:00 107

原创 指向指针的指针

//指向指针的指针#include<stdio.h>int main(){ int a[5]={1,3,5,7,9}; int *nums[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; int **p; p=nums; int i; for(i=0;i<5;i++){ printf("%d ",**p); p++; }} 理解:a是一个装有五个整型数据的数组;nums是装有五个指针的数组,

2021-01-26 17:36:03 51

空空如也

空空如也

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

TA关注的人

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