![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
远不及你的微笑
这个作者很懒,什么都没留下…
展开
-
Acwing第1205题(买不到的数目)
相关题目:买不到的数目https://www.acwing.com/problem/content/1207/相关代码:#include<iostream>using namespace std;/* 当p和q互质,也就是一个为奇数,一个为偶数的情况下,那不能凑出的最大整数为(p-1)(q-1)-1。这个定理需要记住。*/int main(){ int p,q; cin>>p>>q; cout<<(..原创 2022-01-10 13:39:48 · 160 阅读 · 0 评论 -
Acwing第796题(子矩阵的和)
相关题目:子矩阵的和https://www.acwing.com/problem/content/description/798/相关代码:/* 本题需要用到容斥原理。具体的思路看y总的视频。*/#include<iostream>using namespace std;int a[1001][1001];int s[1001][1001];int m,n,q;int main(){ cin>>n>>m>>q;原创 2022-01-09 16:05:20 · 84 阅读 · 0 评论 -
Acwing第789题(数的范围)
相关题目:数的范围https://www.acwing.com/problem/content/791/解题思路:暴力线性搜索,没有用到什么技巧。主要是分别设置了一个存放起始位置、终止位置的数组。利用该数出现次数来判断该数的起始位置和终止位置。相关代码:#include<iostream>using namespace std;int s[10001];int e[10001];int c[10001];int a[100001];int main().原创 2022-01-08 11:56:39 · 61 阅读 · 0 评论 -
Acwing第795题(前缀和)
相关题目:前缀和https://www.acwing.com/problem/content/797/注意点:此题应该设置一个前缀和数组,并且下标应该从0开始。相关代码:#include<iostream>using namespace std;int n,m;int x;int l,r;int s[100001]; //此处需要定义一个前缀和数组。int main(){ cin>>n>>m; ...原创 2022-01-08 11:46:49 · 101 阅读 · 0 评论 -
Acwing1209题(带分数)
相关题目:1209. 带分数 - AcWing题库https://www.acwing.com/problem/content/1211/解题思路:首先对1-9的数进行全排列,在全排列的途中,同时将该串数字分成三组。自处可以设置两个for循环。具体可见y总的解题思路。相关代码:#include<iostream>using namespace std;//首先要弄出1-9的全排列。bool st[100];int nums[100];int targe原创 2022-01-07 14:22:50 · 292 阅读 · 0 评论 -
Acwing第788题(逆序对的数量)
相关题目:逆序对的数量https://www.acwing.com/problem/content/790/解题思路:1 暴力法,直接用两个for循环就行了。2 要用到归并排序的思想,并且每一次归并的时候,要记录逆序数的数量,归并后消除一部分逆序,随后继续归并,直到结束为止。(消除部分逆序)举个例子,5 2变成2 5 的目的是消除5和2之间的逆序,但是和其他数的情况还是不知道的。相关代码:#include<iostream>using namespac..原创 2021-12-25 13:48:35 · 311 阅读 · 0 评论 -
Acwing第785题(快速排序)
相关题目:快速排序https://www.acwing.com/problem/content/787/解题思路:(我在b站上面找到了一个比较好的讲解视频,主要是运用到了填坑法)轻松搞定十大经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序、计数排序、桶排序和基数排序)相关代码:(代码我已在本视频的基础上进行了优化)#include<iostream>using namespace std;void sort1(i原创 2021-12-22 12:26:38 · 133 阅读 · 0 评论 -
Acwing第862题(三元组排序)
相关题目:三元组排序https://www.acwing.com/problem/content/864/相关代码:#include<iostream>#include<string>#include<vector>#include<cstdio>#include<algorithm>using namespace std;struct stc { int x; double y;原创 2021-12-21 10:40:37 · 84 阅读 · 0 评论 -
Acwing第20题(用两个栈实现队列)
相关题目:用两个栈实现队列https://www.acwing.com/problem/content/36/解题思路:s1作为主栈,s2作为辅助栈,当进行完pop(),peek()等操作时,s2中所有的元素要回到s1中。相关代码:class MyQueue {public: stack<int> s1,s2; /** Initialize your data structure here. */ MyQueue() { ..原创 2021-12-20 22:48:42 · 47 阅读 · 0 评论 -
Acwing第36题(合并两个排序的链表)
相关题目:合并两个排序的链表https://www.acwing.com/problem/content/34/解题思路:双指针法,给每个链表设定一个指针,进行遍历。相关代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }原创 2021-12-19 22:23:41 · 313 阅读 · 0 评论 -
Acwing第29题(删除链表中重复的节点)
相关题目:https://www.acwing.com/problem/content/27/http://删除链表中重复的节点解题思路:双指针法,具体实现可见y总的解题思路。相关代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}原创 2021-12-19 21:37:23 · 296 阅读 · 0 评论 -
Acwing第35题(反转链表)
相关题目:反转链表https://www.acwing.com/problem/content/description/33/解题思路:画图加上头插法可以解决该问题。相关代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };原创 2021-12-18 23:18:53 · 706 阅读 · 0 评论 -
Acwing第779题(最长公共字符串后缀)
相关题目:最长公共字符串后缀https://www.acwing.com/solution/content/70345/解题思路:取出s1和s2的最长公共后缀a,然后再将a和s3进行处理,取出s3和a的最长公共后缀,以此类推。相关代码:#include<iostream>#include<string>#include<algorithm>//首先定义s1和s2可以取出最长公共前缀的方法。string fun(string s1,stri原创 2021-12-13 19:35:27 · 914 阅读 · 0 评论 -
Acwing第778题(字符串最大跨距)
相关题目:字符串最大跨距https://www.acwing.com/problem/content/780/相关代码:#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){ string s,s1,s2; char c; while(cin>>c,c!=','){ s=s+c;原创 2021-12-12 16:22:46 · 295 阅读 · 0 评论 -
Acwing第777题(字符串乘方)
相关题目:字符串乘方https://www.acwing.com/problem/content/779/解题思路:该主串=循环次数*最小子串的长度。相关代码:#include<iostream>#include<string>using namespace std;int main(){ string s,a,sum; while(cin>>s,s!="."){ for(int i=1;i<=s.le原创 2021-12-12 15:01:09 · 576 阅读 · 0 评论 -
Acwing第776题(字符串移位包含问题)
相关题目:字符串移位包含问题https://www.acwing.com/problem/content/description/778/解题思路 1:将两个主串连接到一起,不用进行循环移位,随后进行字符串的模式匹配,此算法节省了空间和时间,使其大大地优化。相关代码 1:#include<iostream>#include<algorithm>#include<string>using namespace std;int main(){原创 2021-12-10 20:49:06 · 805 阅读 · 0 评论 -
Acwing第771题(字符串中最长的连续出现的字符)
相关题目:字符串中最长的连续出现的字符https://www.acwing.com/problem/content/773/解题思路:运用到双指针法,移动的中途发现在末尾加一个空格会使双指针移动操作简便快捷。下面是双指针的移动过程,如图所示。相关代码:#include<iostream>#include<string>using namespace std;int main(){ int N; string s; ..原创 2021-12-09 19:56:17 · 141 阅读 · 0 评论 -
Acwing第774题(最长单词)
相关题目:最长单词https://www.acwing.com/problem/content/776/相关代码:#include<iostream>#include<string>using namespace std;int main(){ string s[500]; int i=0; int max=0; int index=0; while(cin>>s[i]){ char a = ge原创 2021-12-09 17:28:18 · 61 阅读 · 0 评论 -
Acwing第766题(去掉多余的空格)
相关题目:去掉多余的空格https://www.acwing.com/problem/content/768/相关解法:#include<iostream>#include<string>using namespace std;int main(){ string s1; while(cin>>s1){ cout<<s1<<' '; } }注意点:stri.原创 2021-12-05 11:11:42 · 75 阅读 · 0 评论 -
Acwing第773题(字符串插入)
相关题目:字符串插入https://www.acwing.com/problem/content/775/相关代码:#include<iostream>#include<string>using namespace std;int main(){ string s1; string s2; while(cin>>s1>>s2){ int max=-99; int index; for(int原创 2021-12-04 21:20:21 · 635 阅读 · 0 评论 -
Acwing第756题(蛇形矩阵)
相关题目:蛇形矩阵https://www.acwing.com/problem/content/758/解题思路:主要是要设置蛇走动方向。相关代码:#include<iostream>using namespace std;int A[200][200]; //首先先定义一个大的矩阵。int main(){ int n,m; cin>>n; //n表示行 cin>>m; //m表示列 int原创 2021-12-02 23:39:34 · 53 阅读 · 0 评论 -
Acwing第753题(平方矩阵 I)
相关题目:平方矩阵 Ihttps://www.acwing.com/problem/content/755/解题思路:矩阵中每个元素代表的意思是该元素分别到矩阵的四条边的距离的最小值。相关代码:#include<iostream>#include<cmath>using namespace std;int main(){ int N; cin>>N; while(N!=0){ for(int i=1原创 2021-12-02 13:38:14 · 114 阅读 · 0 评论 -
Acwing第656题(钞票和硬币)
钞票和硬币https://www.acwing.com/problem/content/658/相关代码:#include<iostream>using namespace std;int main(){ double m; cin>>m; int N = m*100; printf("NOTAS:\n"); printf("%d nota(s) de R$ 100.00\n",N/10000); N=N%10000;原创 2021-11-26 00:10:00 · 144 阅读 · 0 评论 -
树的相关术语
1 根结点2 结点3 度:结点所拥有的子树的数目4 孩子:结点子树的根节点5 兄弟:同一个双亲的孩子6 层次:根为第一层,根的孩子为第二层,以此类推7 有序树:一层次从左到右有次序8 无序树:一层次从左到右可以无次序9 深度:树中结点的最大层次10 叶子结点11 完全二叉树(下面两张图片可以理解一下)12 二叉树的性质1: 在二叉树的第i层至多有2^(i-1)个结点13 二叉树的性质2: 对于任何一棵二叉树,如果叶子结点的个数为n1,度为2的结点数为n2,原创 2021-11-18 19:34:49 · 3959 阅读 · 0 评论 -
用前序遍历和中序遍历来构造二叉树
说明:最近专业课老师讲到了二叉树部分内容,听到用前序遍历和中序遍历来构造二叉树这块知识点比较迷,自己花了1天时间来琢磨,终于琢磨透了。并且我在b站上找到了一个比较好的讲解视频。讲解视频:二叉树的重构(已知先序、中序遍历)视频内容的补充:前序遍历:目的是为了得到二叉树的根节点和每个子树的根节点。后序遍历也是如此。中序遍历:目的是为了得到左右子树分别是由哪些字符所构成。举个例子比较好理解,例如,视频中以B为根节点,当左子树D中只有D节点时,由前序遍历那一串字符...原创 2021-11-15 23:22:00 · 1266 阅读 · 0 评论 -
稀疏数组快速转置算法
1. 稀疏数组的存储在实际应用中,我们经常会遇到一种矩阵,此类矩阵零元素比较多,非零元素会比较少,我们称这一类矩阵为稀疏数组(也可叫做稀疏矩阵)(1)稀疏数组的实例(2)稀疏数组的存储(用三元组表来进行存储)(三元分别指的是行,列,元素值)稀疏数组的第一行记录的是该稀疏数组有几行几列,并且有多少个非零元素。其他几行分别记录的是每个非零元素所对应的行和列和值。例如...原创 2021-11-07 01:35:58 · 95 阅读 · 0 评论 -
顺序栈的基本操作
相关代码://顺序队列的基本操作#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef struct Queue { int data[MAXSIZE]; int front; //定义一个头指针 int rear; //定义一个尾指针 }LineQueue;//定义一个初始化队列的方法void Init(LineQueue *Q){ Q->front=0;原创 2021-10-23 20:20:56 · 79 阅读 · 0 评论 -
链式栈的基本操作
相关代码:#include"stdio.h"#include"stdlib.h"//定义一个链栈的结构体//这个链式表有点特殊,它的最大长度是无限大typedef struct stack { int data; struct stack *next;}Stack;//定义一个判断栈是否为空的方法int IsEmpty(Stack *top){ if(top->next==NULL){ return 1; } else...原创 2021-10-16 09:59:24 · 343 阅读 · 0 评论 -
顺序栈的基本操作
相关代码:#include"stdio.h"#include"stdlib.h"#define maxSize 100/*顺序栈的基本操作*///首先定义一个栈的结构体typedef struct stack { int data[maxSize]; int top;}Stack;//顺序栈的初始化void Init(Stack *s){ s->top = -1;}int IsEmpty(Stack *s){ if(s->to...原创 2021-10-15 19:33:17 · 107 阅读 · 0 评论 -
力扣485题
思路概要首先最少要有一个for循环进行遍历,指针指向0的时候计算出count的值,然后算出最大的count,即maxcount,最后到结尾之前的一点,可能会有111连续,所以用count来记录数据,最后来比较一下maxcount和count,来得到最大的数值。class Solution { public int findMaxConsecutiveOnes(int[] nums) { int count=0; int maxcount=..原创 2021-09-12 22:30:36 · 110 阅读 · 0 评论 -
头插法和尾插法(用c语言实现)
相关代码:#include<stdio.h>#include<stdlib.h>typedef struct Node { int data; struct Node *next;}Node;//头插法建立链表 带有head头结点的情况。Node *create1(int n){ Node *head ,*s; int i; head=(Node *)malloc(sizeof(Node)); //head节点申请了一个内存空间。 h..原创 2021-09-12 01:18:44 · 908 阅读 · 0 评论 -
中缀表达式转化为逆波兰表达式(用Java来实现)
简要:比如中缀表达式1+(23)-5+6/2+(12/3)转化为逆波兰表达式的步骤1 从左向右扫描中缀表达式。2 首先扫描到1,将1放入到result中,3 后扫描到+,将+放入到stack中,4 后扫描到(,将(放入到stack中,5 后扫描到2,将2放入到result中,6 后扫描到*,如果扫描到的操作符的优先级大于stack栈顶元素的优先级,则把扫描到的操作符放到stack中,反之,则把栈顶元素放入到result中。。又已知 * 操作符的优先级大于+,则将*放入到stack中。..原创 2021-07-17 00:29:06 · 511 阅读 · 0 评论 -
一个比较易懂的视频(中缀表达式转化成后缀表达式)
【应试技巧】手动快速转换前缀和后缀表达式原创 2021-07-16 23:57:36 · 56 阅读 · 0 评论 -
希尔排序算法(用Java来实现)(用交换法来实现)
相关代码(优化前):import java.util.Arrays;public class Test { public static void main(String[] args){ int b[] = {8,9,1,4,2,3,5,4,6,0,-1}; shellSort(b); } public static void shellSort(int a[]){ int temp=0; for(in..原创 2021-07-11 16:37:26 · 54 阅读 · 0 评论 -
基数排序(用Java实现)
简要: 基数排序是通过比较对应的个位数或者十位数或者百位数,通过一定的规则进行排序。相关代码:(1)优化前相关代码:import java.util.Arrays;public class Test { public static void main(String[] args){ int a[] = {53,3,52,542,748,14,214}; So..原创 2021-07-10 14:42:09 · 67 阅读 · 0 评论 -
插入排序(用Java实现)
简要首先将数组分为左边只有一个元素的有序列表,剩下的元素组成无序列表。将无序列表中第一个元素按照一定的规则插入到有序列表内,多次循环,形成一个有序列表。注意点:当temp插入有序列表中时,比temp大的有序列表中所有元素需要向后移动一位。相关图片:相关代码:import java.util.Arrays;public class Test { public static void main(String[] args){ int a[]..原创 2021-07-04 18:36:23 · 106 阅读 · 0 评论 -
优化前和优化后的选择排序算法(用Java实现)
简要:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后减少一个头元素再一次排序,存放在序列的起始位置。重复元素个数-1次,排序完成。注意点:排序次数=元素个数-1优化前的算法import java.util.Arrays;public class Test { public static void main(String[] args){ int a[]={101,34,119,1}; //四个元..原创 2021-07-03 18:35:06 · 83 阅读 · 0 评论 -
冒泡排序的代码实现和优化
简要:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端,像泡泡一样浮出水面。注意点:一趟排序中,最好加上一个标签flag来判断是否发生了交换,如果发生了交换,则立马跳出循环,此时冒泡排序算法得到了优化。如果没有发生,则将flag还原成初始值继续遍历..原创 2021-07-03 00:16:59 · 115 阅读 · 0 评论 -
暴力匹配算法实现字符串匹配问题(Java版)
相关代码:public class Test { static int j = 0 ; //定义s2的索引值。 public static void main(String[] args){ String str1 = "我叫123"; String str2 = "123"; char s1[] = str1.toCharArray(); char s2[] = str2.toCharArray(); int原创 2021-06-29 13:54:59 · 100 阅读 · 0 评论 -
用递归的方法实现斐波那契数列(Java版)
简要:斐波那契数列是后一项等于前面两项之和。即为f(n)=f(n-1)+f(n-2);相关代码的注意点:比如,要求出第5项的数是多少?这里就可以用到递归的思想。如图所示:相关代码:public class Test { //斐波那契数列中的递归 public static void main(String[] args) { System.out.println(fibonacci(39)); System.out...原创 2021-06-27 14:09:02 · 1031 阅读 · 0 评论