数据结构与算法
数据结构与算法学习
问剑白玉京
我要进大厂!
展开
-
【23王道数据结构】根据先序中序(中序后序)建立二叉树,并遍历
思路已知先序中序TreeNode* ConstructTree(char pre[], int preStart, int preEnd, char in[], int inStart, int inEnd) { if (preStart > preEnd || inStart > inEnd) return NULL; TreeNode *root = (TreeNode *) malloc(sizeof (TreeNode)); root->data =原创 2022-04-25 19:56:23 · 432 阅读 · 0 评论 -
【23王道数据结构】串的基本操作
//// Created by 48272 on 2022/4/20.//#include <iostream>using namespace std;const int MAXSIZE = 20;typedef struct { char data[MAXSIZE]; int length;}String;void Init(String &s);void StrCopy(String &T, String s);bool StrEmp原创 2022-04-20 16:53:08 · 1475 阅读 · 2 评论 -
【王道23数据结构】栈和队列的应用 课后题第三题。利用一个栈实现以下递归......
思路 代码//// Created by 48272 on 2022/4/18.//#include <iostream>#include <stack>using namespace std;stack<int> s;int f(int n, int x);int main() { printf("结果为:%d\n", f(3,1)); return 0;}int f(int n, int x) { if (n =原创 2022-04-18 15:42:54 · 736 阅读 · 0 评论 -
【王道数据结构】括号匹配
//括号匹配 bool match(SqList s, char a[]) { int i; char t; for (i = 0; a[i] != '\0'; i++) { if (a[i] == '(' || a[i] == '[' || a[i] == '{') { push(s,a[i]); } else { if (isEmpty(s)) return false; //有多余的右括号 pop(s,t); //判断栈顶元素是否与当前右括号匹配 .原创 2022-04-15 10:27:05 · 522 阅读 · 0 评论 -
【2023王道数据结构】链栈-不带头结点
思路:s指向第一个进栈的元素,其余的按头插法插入#include <iostream>#include <stdlib.h>using namespace std;typedef struct LinkNode { int data; struct LinkNode *next;}*LinkStack;void init(LinkStack &s);void push(LinkStack &s, int x);void pop(LinkSta原创 2022-04-12 15:39:53 · 1478 阅读 · 1 评论 -
【23王道数据结构】链表课后题25,【2019统考真题】设线性表L=·······
思路:时间复杂度 O(N) 空间复杂度O(1)主要代码void operate(LinkList &L) { if (L->next == NULL || L->next->next == NULL || L->next->next->next == NULL) return; //空链表,一个元素的链表,两个元素的链表不用操作 int length = 0; LNode *p = L, *q; //q指向后半段的第一个元素 whi原创 2022-04-11 17:33:01 · 1976 阅读 · 0 评论 -
【数据结构】线性表的基本操作
线性表的基本操作在第pos个位置插入删除第pos个元素后续待补充整体代码在第pos个位置插入/* @brief 在第pos个位置插入元素elem @param L 线性表 @param pos 位序 @param elem 待插入元素 @return short int*/short int ListInsert(SeqList &L, int pos, int elem) { //合法判断 if (pos < 1 || pos > L.length + 1)原创 2022-03-28 20:53:20 · 1613 阅读 · 0 评论 -
输入输出实践的 A+B (III)
问题描述:您的任务是计算 a = b。。输入:输入包含多个测试用例。每个测试用例都包含一对整数 a 和 b,每行一对整数。包含 0 0 的测试用例终止输入,并且不处理此测试用例。输出:对于每对输入整数 a 和 b,应在一行中输出 a 和 b 的总和,并在输入中每行输出一行。示例输入:1 510 200 0样品输出:630作者:lcy推荐:JGshining(C++)代码:#include<iostream>using namesp原创 2020-10-16 21:14:23 · 869 阅读 · 0 评论 -
【求助】田忌赛马
我自己测试了许多例子答案都是正确的,可就是AC不了,求大佬看一下!#include<iostream>#include<algorithm>#include<cstdlib>using namespace std;int *tian,*king;bool cmp(int a, int b){ return a>b;}int main(){ int n; int k=0; while(k<=50&&cin>>原创 2020-10-17 16:56:04 · 104 阅读 · 0 评论 -
输入输出实践的 A+B (II)
问题描述:您的任务是计算 a = b。输入:输入在第一行中包含整数 N,然后 N 行跟随。每行由一对整数 a 和 b 组成,由空格分隔,每行一对整数。。输出:对于每对输入整数 a 和 b,应在一行中输出 a 和 b 的总和,并在输入中每行输出一行。示例输入:21 510 20样品输出:630作者:lcy推荐:JGshining(C++)代码:#include<iostream>using namespace std;int ma原创 2020-10-16 21:11:49 · 1285 阅读 · 0 评论 -
879. 盈利计划
盈利计划集团里有 n 名员工,他们可以完成各种各样的工作创造利润。第 i 种工作会产生 profit[i] 的利润,它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作,就不能参与另一项工作。工作的任何至少产生 minProfit 利润的子集称为 盈利计划 。并且工作的成员总数最多为 n 。有多少种计划可以选择?因为答案很大,所以 返回结果模 10^9 + 7 的值。输入:n = 5, minProfit = 3, group = [2,2], profit = [2,3]输.原创 2021-06-09 11:10:54 · 73 阅读 · 0 评论 -
数据结构:PTA 7-2 三元组顺序表表示的稀疏矩阵转置运算Ⅰ
问题描述:三元组顺序表表示的稀疏矩阵转置。输入格式:输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。输出格式:输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。输入样例1:3 4 30 1 -51 0 12 2 2输出样例1:0 1 11 0 -52 2 2#include<iostream>using namespace std;原创 2020-10-15 12:11:03 · 6734 阅读 · 4 评论 -
链表的基本操作
链表的基本操作实现的操作有1>初始化链表2>创建链表3>获取链表长度4>在位置i处插入元素5>在位置i处删除元素6>修改位置i处的值#include<iostream>#include<cstdlib>#include<cstring>#include<queue>#include<stack>#include<string>#include<string.h&g原创 2020-11-11 21:04:06 · 101 阅读 · 0 评论 -
7-51 两个有序链表序列的合并 (20 分)
7-51 两个有序链表序列的合并 (20 分)题目链接:7-51 两个有序链表序列的合并 (20 分)我只是一个摆设7-51 两个有序链表序列的合并 (20 分)代码代码#include <iostream>using namespace std;struct node{ int val; node *next; node():val(0), next(NULL) {} node(int x): val(x), next(NULL) {}原创 2021-04-19 20:26:32 · 298 阅读 · 0 评论 -
7-2 银行业务队列简单模拟
PTA 7-2 银行业务队列简单模拟问题描述:设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空原创 2020-10-15 10:55:21 · 1514 阅读 · 0 评论 -
【23王道数据结构】表达式求值 C++&&Java
acwing 表达式求值, 题号3302#include <iostream>#include <cstring>#include <algorithm>#include <unordered_map>#include <stack>using namespace std;stack<int> num; // 数字栈stack<char> op; //运算符栈// 用于取操作符栈顶符号,并计算voi原创 2021-05-26 15:49:10 · 192 阅读 · 0 评论 -
PTA-7-3 点赞狂魔 (25分)
问题描述:微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。输入:输入在第一行给出一个正整数N(≤100),是待统计的用户数。随后N行,每行列出一位用户的点赞标签。格式为“Name K F1⋯F原创 2020-11-30 17:53:07 · 1581 阅读 · 0 评论 -
目标和target sum dp + 回溯
目标和动态规划class Solution {public: int findTargetSumWays(vector<int>& nums, int target) { int n = nums.size(); int sum = 0; for (int i = 0; i < n; i++) sum += nums[i]; if ((sum - target)原创 2021-06-07 09:46:30 · 121 阅读 · 0 评论 -
278. 第一个错误的版本 二分查找
278. 第一个错误的版本// The API isBadVersion is defined for you.// bool isBadVersion(int version);class Solution {public: int firstBadVersion(int n) { long long l = 1, r = n; while (l < r) { long long mid = (l + r) &原创 2021-06-13 16:27:58 · 71 阅读 · 0 评论 -
7-37 模拟EXCEL排序 (25 分)
PTA 7-37 模拟EXCEL排序 (25 分)题目描述输入格式输出格式样例输入样例输出思路代码题目描述Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式输入的第一行包含两个正整数N(≤10^5) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。输出格式在N行中输出按要求原创 2021-04-20 12:05:36 · 176 阅读 · 0 评论 -
分治+蛮力 最近点对问题
导航问题描述随机生成数据记录时间蛮力法代码分治法思路归并排序对x进行升序排序对y进行升序排序代码最终代码问题描述随机生成若干组数据,求距离最近的两点之间的距离,分别用蛮力法、分治法计算,并比较运算时间随机生成数据随机生成整数:int *generateRandomArray(int n, int rangeL, int rangeR) { assert(rangeL <= rangeR); int *arr = new int[n]; // 创建一个 n个元素的数组 sra原创 2021-04-28 20:38:46 · 779 阅读 · 0 评论 -
贪心法求TSP问题
TSP问题是指旅行家要旅行n个城市然后回到出发城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。采用最近邻点的策略从任意城市出发,每次在没有到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。给定初始的城市a,寻找与其邻接的最短距离的城市b,记录二者之间的路径并增加总路径长度;下一次从城市b开始,寻找与b邻接的最短距离的城市,循环查找,直到找到n-1条路径(n为城市个数),最后加上终点回到起点的边即可。代码:#include <iostream>#incl.原创 2021-07-05 18:50:13 · 662 阅读 · 0 评论 -
TSP 问题 回溯法
#include <iostream>using namespace std;const int N = 11;const int Max = 0x3f3f3f3f;int g[N][N];int best[N], x[N];//最优向量解、当前解int curdis, bestdis = Max;int n;void dfs(int t){ if (t > n) { if (g[x[n]][1] != -1 && g原创 2021-06-06 14:23:21 · 331 阅读 · 0 评论 -
PTA-7-2 抢红包 (25分)
问题描述:没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。输入:输入第一行给出一个正整数N(≤10^4),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:K N1 P1……NK PK其中K(0≤K≤20)是发出去的红包个数,Ni是抢到红包的人的编号,Pi>0)是其抢到的红包金额(以分为单位)。注意:对于同一个人发出的红包,每人最多只能抢1次,不能重复抢。输出:按照原创 2020-11-30 17:49:24 · 440 阅读 · 0 评论 -
雪糕的最大数量 排序+贪心
雪糕的最大数量雪糕的最大数量题目描述样例数据范围思路代码题目描述夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。注意:Tony 可以按任意顺序购买雪糕。样例输入:cost原创 2021-07-02 20:16:01 · 156 阅读 · 0 评论 -
PTA 7-1 球队“食物链” (30 分)
7-1 球队“食物链” (30 分)某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{ T1 T2 ⋯ TN },满足:球队T1 战胜过球队T2 ,球队T2 战胜过球队T3 ,⋯,球队T(N−1) 战胜过球队TN转载 2021-05-08 15:58:12 · 916 阅读 · 0 评论 -
PTA-7-1 冒泡法排序 (20分)
问题描述:将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。输入:输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。输出:在一行中输出冒泡排序法原创 2020-11-30 17:44:28 · 10704 阅读 · 1 评论 -
零钱兑换--- 完全背包问题
零钱兑换独立写出来 芜湖! 就是完全背包问题二维class Solution {public: int change(int amount, vector<int>& coins) { int n = coins.size(); vector<vector<int>> f(n + 1, vector<int>(amount + 1)); for (int i = 0; i <= n;原创 2021-06-10 14:47:07 · 125 阅读 · 0 评论 -
Candy-贪心算法
贪心算法就是从局部最优到全局最优题目描述:一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。输入输出样例:输入是一个数组,表示孩子的评分。输出是最少糖果的数量。#include<iostream>using namespace std;int main(void){ int a[100][2]; int原创 2020-12-27 10:12:09 · 186 阅读 · 0 评论 -
一和零 dp
一和零三维代码class Solution {public: int findMaxForm(vector<string>& strs, int m, int n) { int length = strs.size(); vector<vector<vector<int>>> f(length + 1, vector<vector<int>>(m + 1, vector<int>原创 2021-06-06 15:07:50 · 59 阅读 · 0 评论 -
1049. 最后一块石头的重量 II (遇题不决,就选dp)
1049. 最后一块石头的重量 II当i = 0 的时候 f[i][1…sum/2] = 0二维class Solution {public: int lastStoneWeightII(vector<int>& stones) { int n = stones.size(); int sum = 0; for (int i = 0; i < n; i++) sum += stones[i];原创 2021-06-08 11:14:13 · 61 阅读 · 0 评论 -
letcood随笔集-贪心算法
贪心算法就是从局部最优到全局最优例题 ASSIGN COOKIES题目描述:有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子可以吃饱。输入输出样例:输入两个数组,分别代表孩子的饥饿度和饼干的大小。输出最多有多少孩子可以吃饱的数量。#include<iostream>#include<cstring>#include<algorithm原创 2020-12-27 09:38:24 · 405 阅读 · 0 评论 -
数据结构 三元组的快速转置
#include <iostream>using namespace std;#define maxSize 10000typedef int ElemType;struct Triple{ int i, j; ElemType e;};struct tsMatrix{ Triple data[maxSize + 1]; int mu, nu, tu;};void fastTransposeSmatrix(tsMatrix m, ts原创 2021-08-15 10:24:40 · 554 阅读 · 0 评论 -
数据结构 栈与队列(循环队列) 数组实现
栈与队列栈队列栈栈是满足后进先出的一种数据结构,我这里是rear指针指向的栈顶不空的地方#include <iostream>#include <cstring>using namespace std;const int N = 10010;int stk[N], rear;void menu();void init();void destoryStack();void clearStack();bool stackEmpty();int stack原创 2021-08-14 09:57:36 · 175 阅读 · 0 评论 -
数据结构 双向链表
PS:写双向链表或单链表的时候,最后边画边敲代码,并且每写完一个函数调试一下,这样最后不至于崩溃/ww.#include <iostream>using namespace std;struct Node{ int data; struct Node *pre; struct Node *next;};typedef Node *LNode;void menu();void init(LNode &head, LNode &tail原创 2021-08-13 11:05:03 · 57 阅读 · 0 评论 -
链表实现 (结构类型数组, 普通数组)
链表实现结构类型数组普通数组结构类型数组#include <iostream>typedef int ElemType;using namespace std;struct LNode{ ElemType data; struct LNode *next;};typedef LNode* LinkList;void initLinkList(LinkList &head); //初始化void insertLNode(LinkList &am原创 2021-08-07 11:19:17 · 199 阅读 · 0 评论