数据结构
天天向上的菜鸡杰!!
生活明朗 万物可爱 人间值得 全力以赴
展开
-
八大排序算法之终章---归并排序
一:简单介绍归并排序排序就是利用归并的思想实现的排序方法它的原理是将初始化序列划分成n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到(n/2)个长度为1或者2的有序子序列;然后再两两合并…不断重复 直到最后 得到一个长度为n的有序序列为止。关键词: 将初始化序列划分成n个记录 每次合并的都是有序序列二:图示详解最后一步的合并:三:上码public class mergeSort1 { public static void main(St原创 2022-04-18 17:43:25 · 631 阅读 · 0 评论 -
八大排序算法之选择排序算法
一:简单选择排序算法1:思想(1):概念总共有n个数,同时下标是从0到n-1;我们要进行n-1趟的交换每一趟在 (n-i)-1个记录中寻找出最小值(也就是找出该数组下标后面数中的最小值),与i下标所代表的值进行比较,如果比其小那么就进行交换(前提我们是求得是升序)。(2):举例验证文字验证第一次从 arr[1]~arr[n-1]中选取最小值,与 arr[0]作比较 判断是否交换第二次从 arr[2]~arr[n-1]中选取最小值,与 arr[1]作比较 判断是否交换第三次从 ..原创 2022-04-12 17:51:28 · 768 阅读 · 0 评论 -
蓝桥杯- 包子凑数
一:题目题目描述小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 NN 种蒸笼,其中第 ii 种蒸笼恰好能放 A_iAi 个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买 XX 个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有 XX 个包子。比如一共有 3 种蒸笼,分别能放 3、4 和 5 个包子。当顾客想买 11 个包子时,大叔就会选 2 笼 3 个的再加 1 笼 5 个的(也可能选出 1 笼 3 个的再加 2 笼 4 个的)。当然有时包子大叔原创 2022-04-07 17:35:16 · 277 阅读 · 0 评论 -
利用结构体数组实现重排序(详解)
一:要求输入乱序的 成绩单 包括 姓名和成绩,成绩按照递增顺序 输出,如果遇见成绩相同的 按名字的字典序输出。 示例:输入5w 12a 12v 7c 3e 9输出:c 3v 7e 9a 12w 12二:代码实现#include<bits/stdc++.h>using namespace std;struct Node { string name; int grate;};bool cmp(Node node1,Node n原创 2022-04-04 17:33:12 · 678 阅读 · 1 评论 -
利用数组创建二叉树并赋值
1:二叉树的创建与赋值(1):前言知识这里的创建是利用层序序列进行创建,主要就是根节点的坐标为i 的话 那么左节点的坐标为 2i+1,右节点的坐标为2i+2;开辟一个结构体struct Node { int val; Node * left; Node * right; Node () : val(-1),left(NULL),right(NULL) {}; Node(int x) : val(x),left(NULL),right(NULL) {};}node;创原创 2022-04-04 16:47:16 · 2385 阅读 · 0 评论 -
蓝桥杯-长草-代码(BFS)
一:题目题目描述小明有一块空地,他将这块空地划分为 nn 行 mm 列的小块,每行和每列的长度都为 1。小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。请告诉小明,kk 个月后空地上哪些地方有草。输入描述输入的第一行包含两个整数 n, mn,m。接下来 nn 行,每行包含 mm 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表原创 2022-04-02 17:45:45 · 306 阅读 · 0 评论 -
蓝桥杯-成绩分析-编程题
一:题目二:上码#include<bits/stdc++.h>using namespace std;int main() { int n; cin >> n; vector<int> v(n,0); for (int i = 0; i < n; i++) { cin >> v[i]; } sort(v.begin(),v.end()); double sum = accumulate(v.begin(),v.en原创 2022-04-01 18:30:06 · 450 阅读 · 0 评论 -
蓝桥杯-排序-填空题
一:题目二:上码#include <iostream>using namespace std;int main(){ // 请在此输入您的代码 /** /** 冒泡排序中:我们考虑到最坏的情况,那就是全都是逆序 那么就需要交换 N(N-1)/2; 那么100次 最起码需要 15个字符, 而15个字符完全逆序的话 需要交换 105次 那么就需要将这105次中我们调换一个字符的位置 来使105次 减少到100次原创 2022-04-01 18:16:48 · 284 阅读 · 0 评论 -
蓝桥杯-卡片-填空题
一:题目二:思路1是最快消耗完的计算1的个数即可三:上码#include <iostream>using namespace std;int main(){ int ans = 0; int count = 0; for(int i = 1; i < 20000; i++) { string str = to_string(i); // cout << str << endl; for(int j = 0; j &l原创 2022-04-01 16:51:54 · 135 阅读 · 0 评论 -
leetcode剑指 Offer 29. 顺时针打印矩阵
一:题目二:上码class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { //判空处理 否则会出现空指针异常 if(matrix.size() == 0 || matrix[0].size() == 0){ return {}; } in原创 2022-03-31 19:37:20 · 841 阅读 · 0 评论 -
leetcode59. 螺旋矩阵 II
一:题目二:上码class Solution {public: /** 思路: 1.这个就是模拟螺旋的过程 2.我们要注意的是边界条件 我们采用的左闭右开 3.我们在模拟的过程中 进行填数。 */ vector<vector<int>> generateMatrix(int n) { vector<vector<int> >a原创 2022-03-31 17:22:02 · 742 阅读 · 0 评论 -
赛码-编程题-打字
一:题目二:上码#include<bits/stdc++.h>using namespace std;int main() { int n; vector<int> v1; cin >> n; for(int i = 0; i < n; i++) { string str; int count = 0; cin >> str; for (int j = 0; j <原创 2022-03-31 16:34:44 · 1585 阅读 · 2 评论 -
蓝桥杯-代码-数字三角形
一:题目二:代码#include <iostream>#include<vector>using namespace std;int main(){ /** 思路: 1.确定dp数组的定义以及下标的含义 dp[i][j] 表示的是一条路径到达下标i和j时,的最大值 2.确定dp数组的状态转移公式 我们当前位置的最大值其实是由右上方和左上方中最大的值决定的(题目给出的第一个图) dp[i][j] = max(dp[i-原创 2022-03-30 18:53:17 · 414 阅读 · 0 评论 -
蓝桥杯-填空题-购物单
一:题目**** 180.90 88折**** 10.25 65折**** 56.14 9折**** 104.65 9折**** 100.30 88折**** 297.15 半价**** 26.75 65折**** 130.62 半价**** 240.28 58折**** 270.62原创 2022-03-30 16:36:22 · 459 阅读 · 0 评论 -
蓝桥杯-填空题-门牌制作
一:题目二:代码#include <iostream>using namespace std;int main(){ int nums = 2020; int count = 0; string str = to_string(nums); for(int i = 1; i <= nums; i++) { string str = to_string(i); for(auto temp: str) { if(temp == '2'){原创 2022-03-30 15:46:07 · 153 阅读 · 0 评论 -
leetcode54. 螺旋矩阵(详解)
一:题目二:上码class Solution {public: /** 思路: 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2.我们模拟顺时针的顺序,那么得分为4步 上面得一行 (1,2,3) 左面得一行 (4,8,12)原创 2022-03-28 20:57:09 · 486 阅读 · 0 评论 -
leetcode844. 比较含退格的字符串
一:题目二:上码 class Solution { public: /** 思路: 1.利用栈 我们将字符串中的单个元素都入栈 当遇到'#'的时候将将栈顶元素弹出 */ bool backspaceCompare(string s, string t) { stack<int> s1; stack<int> s2;原创 2022-03-28 18:05:54 · 700 阅读 · 0 评论 -
leetcode283. 移动零
一:题目二:上码class Solution {public: /** 双指针移动: 慢指针储存结果 快指针遍历数组 当快指针遇见0的时候 慢指针不动 遇见非0的时候进行赋值 */ void moveZeroes(vector<int>& nums) { int fastIndex = 0; int slowIndex = 0;原创 2022-03-28 17:49:06 · 646 阅读 · 0 评论 -
leetcode26. 删除有序数组中的重复项
一:题目二:上码// class Solution {// public:// int removeDuplicates(vector<int>& nums) {// //排序// sort(nums.begin(),nums.end());// //调用unique()将vector当中的相同元素 放到 容器的最后面// //unique(nums.begin(),nums.end());原创 2022-03-28 17:19:57 · 1764 阅读 · 0 评论 -
蓝桥杯-成绩统计
一:题目题目描述小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。输入描述输入的第一行包含一个整数 n\ (1 \leq n \leq 10^4)n (1≤n≤104),表示考试人数。接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。输出描述输出两行,每行一个百分数,原创 2022-03-26 17:13:15 · 269 阅读 · 0 评论 -
蓝桥杯-单词分析
一:题目题目描述小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。输入描述输入一行包含一个单词,单词只由小写英文字母组成。对于所有的评测用例,输入的单词长度不超过 1000。输出描述输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是原创 2022-03-26 16:33:10 · 181 阅读 · 0 评论 -
leetcode84. 柱状图中最大的矩形
一:题目二:上码class Solution {public: /** 思路: 1.这里单调栈的顺序是 从栈顶到栈底 是递减的 因为我们在求出 比栈顶下标所对应的元素的小的元素时候 要将栈顶元素出栈 此时 新的栈顶元素(left) 和 已出的栈顶元素(mid) 以及 height[i] (right) 这是时候我们可以进行一次求取最值的 ans = max(anx,height[mid]*(原创 2022-03-18 21:25:43 · 223 阅读 · 0 评论 -
leetcode42. 接雨水
一:题目二:上码// class Solution {// public:// /** ===========================超时===================// 思路:// 1.我们按列来计算 这就是表明的是 我们求取接雨水 向上的高度就是雨水量// 但是这里的话我们的需要对雨水的高度 来进行判定// 2.那么如何判定我们所接雨水的高度呢?//原创 2022-03-17 21:40:06 · 282 阅读 · 0 评论 -
leetcode503. 下一个更大元素 II
一:题目二:上码class Solution {public: /** 思路: 1.将两个nums拼接到一块 这里拼接到一块,当我们最后的元素找不到比其大的时候 就会开始从头开始 这样的话就可以继续进行 入栈 或者出栈的操作 入栈就是比我栈顶小的元素,出栈的话 那就是 找到了比其大的元素了 只要我们拼原创 2022-03-17 20:12:00 · 337 阅读 · 0 评论 -
leetcode496. 下一个更大元素 I
二:上码class Solution {public: /** 思路:1.分析题意: 这里是我们在nums1中的元素是全部出现在nums2中的 我们要找的就是 num1[i] == nums2[j] 的话 在nums2[j]中我们要找到右边第一个比其大的元素 2.OK! 那么我们就可知道的是我们就需要用到单调栈了。 3.那么我们是外层循环是 nums1 .原创 2022-03-15 20:31:34 · 330 阅读 · 0 评论 -
leetcode739. 每日温度
一:题目二:上码// class Solution {// public:// vector<int> dailyTemperatures(vector<int>& temperatures) {// vector<int> ans(temperatures.size(),0);// for (int i = 0; i < temperatures.size(); i++) {//原创 2022-03-15 18:32:44 · 769 阅读 · 0 评论 -
map容器实现一对多
一:需求描述我们希望一个数字或则其他字符串可以对应 一串数,#include<iostream>#include<map>#include<vector>using namespace std; int main(){ map<int,vector<int> > m; map<int,vector<int> >:: iterator t; vector<int> v; for(原创 2021-12-24 17:23:18 · 796 阅读 · 0 评论 -
7-1 字母统计图 (10 分)(思路+详解)
一:题目摆放在面前的是一小段英文文章。 afeng希望你能帮他统计一下每个小写字母出现的次数。 最后再以柱状图的形式(参照输出样例)输出出来。输入格式:输入第一行为一个正整数N(N<=100),表示文章的行数。 随后为N行文本。输出格式:由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。格式严格参照样例。输入样例:4I never saw a Moor-I never saw the Sea-Yet know I how the Heather looksAn原创 2021-12-23 22:10:50 · 886 阅读 · 1 评论 -
向结构体或结构体数组中赋值
一:结构体方式1#include<bits/stdc++.h>using namespace std;struct Node{ string name; int grade;};int main(){ Node * node = new Node(); node->grade = 100; node->name = "wyj"; Node *node1 = new Node(); node1->grade = 200; node1->原创 2021-11-20 19:40:15 · 3194 阅读 · 0 评论 -
8-1 回溯法实验报告 (15 分)(思路+详解)
一:题目给定k个正整数,用算术运算符+,-,,/ 将这k个正整数连接起来,是最终的得数恰为m。如果有多组满足要求的表达式,只要输出一组,每一步算式用分号隔开。如果无法得到m,得输出“No Solution”。样例输入:d5 1257 2 2 12 3第一行输入整数的个数k和m,第二行输入k个整数。这只是其中一种结果样例输出: 73=21 21*12=252 252-2=250 250/2=125二:思路:1.全排列 + 子集数2.我们穷举所有的可能的数字组合,这是全排列,但要注意的原创 2021-11-17 07:22:43 · 3395 阅读 · 2 评论 -
利用vector实现一对一(pair<int,int>)
一:前言我们知道有一对一的STL容器有map容器,但是map容器中的按键值排序和不允许由重复的元素,现在,我们可以利用vector<pair<int,int> >来实现一对一,但其没有排序可以允许有重复的元素二:演示#include<bits/stdc++.h>using namespace std;int main(){ vector<pair<int,int> >v; vector<pair<int,int&g原创 2021-11-15 23:31:24 · 2863 阅读 · 0 评论 -
39. 组合总和020(思路+详解)
一:题目:给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为 target 的唯一组合数少于 150 个。示例 1:输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例 2:输入: can原创 2021-11-10 21:25:15 · 137 阅读 · 0 评论 -
7-3 符号三角形 (10 分)(思路+详解)
一:题目 Come 宝 !!!输入格式:第一行符号个数n输出格式:符合要求的三角形个数输入样例:4结尾无空行输出样例:6二:思路思路:1.如果我们确立的第一行的符号是什么 ,那么我们就可以基本上确定我们的符号三角形是什么因为当第一行确定的时候,那么接下来的行就是按照同号为’+’ ,异号为’-’,来填写2.在这里我们选择的解的空间是子集树(因为我们树每次都是’-’,要么是’-’)3.具体步骤1>:递归函数的参数backtacking()2>:输出的 结果原创 2021-11-08 22:20:37 · 2515 阅读 · 3 评论 -
7-2 批处理作业调度 (10 分)(思路+详解)
一:题目:宝宝 你要永远开心,下雪了,多穿点,输入格式:第一行输入作业个数n。第二行输入各任务在机器一上的完成时间。第三行输入各任务在机器二上的完成时间。输出格式:最短完成时间和输入样例:32 3 21 1 3结尾无空行输出样例:18二:思路分析题意:题目是批量处理作业调度,那么我们可以得知,这是让我们完成一个作业之后再去完成另一个作业思路:1.姑且先给我们的作业边上序号 a,b,c三个作业,那么我们可以得知关于这三个作业的的安排有6种方式,那么我们的问题就简单了原创 2021-11-07 13:06:17 · 3360 阅读 · 0 评论 -
7-1 装载问题 (10 分)(思路+详解)
一:题目 Come 宝宝!!输出格式:输出所有可行的方案数量输入样例1:3 50 5010 40 40结尾无空行输出样例1:4结尾无空行输入样例2:3 50 5020 40 40结尾无空行输出样例2:0二:思路1.这个解的空间选择的是子集树2.递归函数参数backtacking()把所有的可行解都记录下来3.返回的结果用一个vector<vector >ans:来存结果vector path:用来存每次的集装箱所装的船的序号将到达叶节点的原创 2021-11-06 21:08:37 · 3222 阅读 · 5 评论 -
并查集的相关知识详解 Come baby!!!
一:并查集的相关知识这道题用到了并查集,所以我就学了一下并查集,所以把自己的见解也分享给大家(建议 先看视频 再浏览 博客 再自己敲一遍 学习效率高而已,我总是乱着来 以为看几篇博客就会了,其实最后还是老老实实 去B站看大佬讲解视频 才搞懂)1:并查集查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题1:查询元素a和元素b是否属于同一组2:合并元素a和元素b所在组 (将有相同元素的元素 合并为一个组 )3:需要初始化一个数组存放父节点,其索引值原创 2021-10-23 20:36:36 · 244 阅读 · 0 评论 -
map容器的使用 逆序遍历map容器当中的数据
一:前言这个逆序遍历是将map容器的迭代器进行了变化,reverse_iterator逆向遍历的迭代器 ,它需要 rbegin()和rend()方法指出反向遍历的 起始位置和终止位置。二:上码演示#include<bits/stdc++.h>using namespace std;int main(){ int N; map<double,double>m; map<double,double>:: reverse_iterator t; //rev原创 2021-10-21 20:38:36 · 2326 阅读 · 0 评论 -
7-2 单源最短路径 (10 分)(思路+详解+邻接表做法)Come Brather!!!!!!!!!!
一:前言本次题解先展示用邻接矩阵做的,但其会出现内存超限,因为确实是临界矩阵在数据很大的时候相比临界表是耗内存的,但是以前习惯用临界矩阵了,所以一上来就用临界矩阵做了,后来上网查了后知道邻接矩阵会内存超限,所以后来又用邻接表写了一遍。二:题目请编写程序求给定正权有向图的单源最短路径长度。图中包含n个顶点,编号为0至n-1,以顶点0作为源点。输入格式:输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b原创 2021-10-21 14:50:09 · 5361 阅读 · 2 评论 -
临界表储存图的数据(思路+详解+图示)
一:前言当我们考虑用邻接表储存数据的时候,一定会拿邻接矩阵和其进行比较。邻接矩阵在储存数量较小的数据是耗费的内存是要高于邻接表的。那么我们在做题的时候如果出现内存超限,那就要注意了,可以考虑换用邻接表来储存数据了二:相关描述1.问题:利用邻接表来储存有向图的数据2.测试数据:输入: 5 81 2 51 3 81 5 32 5 62 3 23 4 103 5 44 5 11输出:为每个顶点和其相连边的顶点以及权值1 5 3 3 8 2 52 3 2 5 63 5 4 4 10原创 2021-10-21 10:49:53 · 855 阅读 · 0 评论 -
vector的基本用法 (详解 + 代码演示)
前言:vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include;一、vector 的初始化:可以有五种方式,举例说明如下:(1) vector a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。(2)vector a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1(3)vector a原创 2021-05-28 17:12:53 · 7877 阅读 · 3 评论