机试/算法/数据结构C++
数据结构知识点 & 考研机试
bijingrui
bijingrui1997
展开
-
冒泡排序C++实现
#include <iostream>#include <vector> using namespace std;void show(vector<int>& a) { for (int i = 0; i <= a.size() - 1; i ++) { cout << a[i] << " "; } cout << endl;}void bubble_sort(.原创 2021-09-16 13:49:29 · 130 阅读 · 0 评论 -
NC 01背包
https://www.nowcoder.com/questionTerminal/2820ea076d144b30806e72de5e5d4bbfhttps://www.nowcoder.com/questionTerminal/708f0442863a46279cce582c4f508658第一行,当没有item可以放入,无论capacity多大,都是0价值原创 2021-08-09 19:33:56 · 158 阅读 · 0 评论 -
NC38 螺旋矩阵
https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31?tpId=190&&tqId=35349&rp=1&ru=/activity/oj&qru=/ta/job-code-high-rd/question-rankinghttps://www.bilibili.com/video/BV1jK411H7XJ?from=search&seid=1254682529426380259原创 2021-08-09 17:16:58 · 205 阅读 · 0 评论 -
NC140 排序(快速排序)
https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896?tpId=117&&tqId=37851&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking快速排序class Solution {public: void quick_sort(vector<int>& a.原创 2021-08-08 21:32:45 · 183 阅读 · 0 评论 -
NC103 反转字符串 C++
1.直接用reverse函数class Solution {public: string solve(string str) { reverse(str.begin(),str.end()); return str; }};2.从后往前添加到新stringclass Solution {public: string solve(string str) { int max_index = str.size() .原创 2021-08-08 20:27:59 · 91 阅读 · 0 评论 -
NC103 反转字符串 - python值传递 引用传递
1.切片版 str[::-1]str[start:end:step] 值都可以省略!def string_reverse(string): return string[::-1]str[2:-1]实际上取的是[2,-1) 若要取到最后,应该是str[2:]2.str转list 然后list.reverse()新str使用''.join拼接每个元素list.sort()sorted(list)但是这里是reverse 不是sort排序...原创 2021-08-08 15:40:54 · 135 阅读 · 0 评论 -
NC78 反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca第一种解法:vector,但是速度不行/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNod原创 2021-08-08 14:03:16 · 117 阅读 · 0 评论 -
计算大于10000查起的第5个素数 (素数筛)
#include<iostream>#include <cmath>using namespace std;bool isPrime[100001];bool judge(int a) { if (a <= 1) { return 0; } else if (a == 2) { return 1; } else { int bound = sqrt(a) + 1; for .原创 2020-09-26 17:57:44 · 1045 阅读 · 0 评论 -
找出第K大的数字 (类似快速排序)C++代码、时间复杂度分析
#include <iostream>#include <vector>using namespace std;void quick_sort(vector<int>& a, int left, int right) { if (left > right) { return; } int pivot = a[left]; int i = left; int j = right; .原创 2020-09-26 18:07:37 · 605 阅读 · 0 评论 -
最大子序列和(DP动态规划)
# include <iostream>using namespace std;int dp[1001] = {0};int main() { int arr[6] = {-2, 11, -4, 13, -5, -2}; dp[0] = max(arr[0], 0 + arr[0]); for (int i = 1; i <= 5; i++) { dp[i] = max(arr[i], dp[i - 1] + arr[i]);.原创 2020-09-23 16:36:49 · 454 阅读 · 0 评论 -
快速排序C++ 时间复杂度
#include <iostream>#include <vector>using namespace std;void show(vector<int>& a){ for (int i = 0; i <= a.size() - 1; i ++) { cout << a[i] << " "; } cout << endl;}int quick_sort.原创 2020-09-23 12:06:41 · 957 阅读 · 0 评论 -
什么是P问题,什么是NP问题,什么是NPC问题
参考:https://zhuanlan.zhihu.com/p/22497908 讲的真好!一种时间复杂度是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。P问题该问题能够找到一个算法,时间复杂度是o(1) o(n) o(nlogn)等 多项式时间 的级别NP问题就是可以短时间内(多项式时间内)验证一个答案正确性的问题。(找一个解很困难,但验证一个...原创 2020-09-23 10:06:42 · 430 阅读 · 0 评论 -
时间复杂度怎么计算
考研万人团:https://www.bilibili.com/video/BV1J4411b7jc?p=2马士兵老师2020最新数据结构与算法全套合集 :https://www.bilibili.com/video/BV1h5411x7Qf?p=4原创 2020-09-22 11:53:21 · 217 阅读 · 0 评论 -
完全背包问题(DP,动态规划)
这个问题 是属于事先推出数学公式,然后计算机只是实现而已,还是依靠人脑嘛!有N种物品和 一个能装capacity重量的背包,每种物品都有无限件可用。第i种物品价值是v[i],重量是w[i]。求解 能装入,且价值总和最大。#include <iostream>#include <cmath>#include <cstdlib>...原创 2020-04-18 16:08:54 · 310 阅读 · 0 评论 -
复试机试【XN2018】
计科学硕: 1.将一个长度为10的数列,最大值放第一个,最小值放最后一个。 输入:1 2 3 4 5 9 0 7 8 6 输出:9 2 3 4 5 1 6 7 8 0#include <iostream>;using namespace std;int nu...原创 2020-04-28 21:10:57 · 12738 阅读 · 1 评论 -
01背包问题(动态规划)(DP)
https://www.bilibili.com/video/BV1X741127ZM以集合角度 来分析DP问题:有限集中,最优值。原创 2020-04-18 15:00:16 · 177 阅读 · 0 评论 -
最短路径问题(dijkstra)
题目描述给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入描述:输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。(1<n<=1000, ...原创 2020-04-08 03:11:28 · 270 阅读 · 0 评论 -
畅通工程续(单元最短路径,dijkstra)(优先队列,重载运算符)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 87181Accepted Submission(s): 33604 Problem Description 某省自从实行了很...原创 2020-04-08 00:36:55 · 226 阅读 · 0 评论 -
开门人和关门人(scanf按格式输入到变量)
题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。输入描述: 每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符...原创 2020-03-14 23:00:30 · 123 阅读 · 0 评论 -
字串计算(map的使用)
#include <iostream>#include <map>using namespace std;map <string, int> m;int main() { string str; string sub; map <string, int>::iterator it; while (cin >> ...原创 2020-03-14 22:50:41 · 178 阅读 · 0 评论 -
魔咒词典(map的使用)
题目描述 哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助。 给你一部魔咒词典。当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能;当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒。如果他要的魔咒不在词典中,就输出“wha...原创 2020-03-14 21:51:04 · 533 阅读 · 1 评论 -
C++ map
#include <iostream>#include <map>using namespace std;// 错误写法 map <int no, string name> m;map <int, string> m;int main() { // 插入数据 m[20153463] = "bijingrui"; m[10...原创 2020-03-14 17:03:34 · 204 阅读 · 0 评论 -
搬水果 计算哈夫曼树最小WPL
题目描述 在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。 假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次...原创 2020-03-14 16:27:53 · 227 阅读 · 0 评论 -
哈夫曼树 计算最小WPL
题目描述哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。输入描述:输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。输出描述:输出权值。示例1输入复制5 1 ...原创 2020-03-14 16:25:57 · 1359 阅读 · 0 评论 -
第K小的数(mark数组查找 哈希)
题目描述查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。输入描述:输入有多组数据。每组输入n,然后输入n个整数(1<=n<=1000),再输入k。输出描述:输出第k小的整数。示例1输入复制62 1 3 5 2 23输出复制3#include <iostream...原创 2020-03-14 15:52:05 · 315 阅读 · 0 评论 -
哈夫曼树
https://blog.csdn.net/qq_33990383/article/details/53073825 哈夫曼树 构造的例子原创 2020-03-14 15:32:09 · 124 阅读 · 0 评论 -
复数集合(优先队列 priority_queue,相关top push pop操作)(重载小于号运算符)
题目描述 一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n...原创 2020-03-14 14:27:38 · 340 阅读 · 0 评论 -
C++ priority_queue 优先队列
queue:排队买票,先进先出priority_queue:排队买票,来了VIP 急着买,他优先级最高,他第一个出。按理说 top应该是2 其实是109#include <iostream>#include <queue>using namespace std;priority_queue<int> pq;int main()...原创 2020-03-14 00:25:16 · 130 阅读 · 0 评论 -
二叉搜索树(两个是否为同一个??)
.题目描述判断两序列是否为同一二叉搜索树序列输入描述:开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。输出描述:...原创 2020-03-13 23:34:52 · 343 阅读 · 0 评论 -
二叉排序树的简历、前中后序遍历
题目描述输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。输入描述:输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出描述:可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。输入中可能有重复元素,但是输出的...原创 2020-03-13 22:35:26 · 130 阅读 · 0 评论 -
二叉排序树建立,并且打印父节点的值
题目描述二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应...原创 2020-03-13 21:23:38 · 322 阅读 · 0 评论 -
二叉排序树(搜索、插入、中序遍历==从小到大排序)
#include <iostream>#include <cstdlib>using namespace std;// binary search treetypedef struct Node { int data; struct Node * pLeftChild; struct Node * pRightChild;} Node,* PNode;...原创 2020-03-13 20:32:55 · 1068 阅读 · 0 评论 -
按照前序遍历 创造二叉树,再中序遍历
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二...原创 2020-03-13 16:32:08 · 522 阅读 · 0 评论 -
八皇后问题(dfs + 回溯)
#include <iostream>#include <cstdlib>using namespace std;int col[9]; // 下标:1 ~ 8行; 内容:放到了哪一列bool mark [9]; // 这一列是否安排好int cnt = 0;void print() { for (int i = 1; i <= 8...原创 2020-03-13 13:22:46 · 295 阅读 · 0 评论 -
Square(dfs)
Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square? 给你一堆不同长度的木棒,可能组成一个正方形吗? Input The first line of input c...原创 2020-03-12 17:06:10 · 194 阅读 · 0 评论 -
dfs回溯模板
void dfs(参数){ if(搜到了) { 计数或进行其他操作; return; } for(查找当前节点的周围的节点) { 进行其他的操作; 标记已经搜索过的节点; dfs(下一次搜索的节点); 取消标记; }} dfs只管拓展下一个。 不要一开始就标记...原创 2020-03-11 20:47:06 · 433 阅读 · 0 评论 -
A Knight's Journey(dfs)
DescriptionBackgroundThe knight is getting bored of seeing the same black and white squares again and againand has decided to make a journeyaround the world.无聊了 想旅行Whenever a knight mo...原创 2020-03-12 16:56:22 · 422 阅读 · 0 评论 -
Find The Multiple(bfs)
DescriptionGiven a positive integer n,给你正整数nwrite a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1.找出n的没有0的 非零倍数m , m的十进制表示只有01...原创 2020-03-10 00:07:04 · 160 阅读 · 0 评论 -
Catch That Cow(bfs)(注意边界条件)
Problem Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. 农民J 被告知 fugitive牛的定位,并且想立马逮到他! He starts at a point N (0 ≤ N ≤ 1...原创 2020-03-09 21:56:58 · 166 阅读 · 0 评论 -
2的幂次方(递归)(有点小难)
题目描述 Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。 Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since ...原创 2020-03-08 21:19:04 · 264 阅读 · 0 评论