自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 运算符重载

运算符重载1、什么是友元?友元的存在形式有?友元有何特点?友元:一般来说,类的私有成员只能在类的内部访问,类之外是不能访问它们的。但如果将其他类或函数设置为类的友元(friend),就可以访问了。存在形式:友元函数(可设为全局函数或成员函数)和友元类特点:友元的声明不受public/protected/private关键字的限制。友元的存在,使得类的接口扩展更为灵活,使用友元进行运算符重载从概念上也更容易理解一些,而且, C++ 规则已经极力地将友元的使用限制在了一定范围内,它是单向的、不具备传递

2021-02-03 22:47:10 209 3

原创 new和delete

new和delete一、new表达式工作步骤调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象运行该类型的一个构造函数初始化对象返回指向新分配并构造的构造函数对象的指针二、delete表达式工作步骤调用析构函数,回收对象中数据成员所申请的资源调用名为operator delete的标准库函数释放该对象所用的内存三、关于operator new/delete以Student类为例#include <string.h&g

2021-02-03 15:24:52 142

原创 CPP类与对象

CPP类与对象1、浅拷贝与深拷贝区别?浅拷贝:只拷贝指针地址,导致两个指针指向同一块内存空间。cpp默认拷贝构造函数是浅拷贝,这在没有指针时是可行的,但当数据成员有指针时,如果仅采用浅拷贝,则两个指针指向同一堆内存。一个对象被析构后,会造成另一对象的指针悬挂。深拷贝:会在堆内存中另外申请一段空间来存储数据。2、当定义类时,编译器会为类自动生成哪些函数?这些函数各自都有什么特点?构造函数:函数名与类名相同,无返回值,可传参,可重载。完成数据成员初始化。默认构造函数无参。初始化表

2021-02-03 14:00:48 164

原创 CPP基础知识

CPP基础知识1、const关键字与宏定义的区别是什么?编译器的处理方式不同。宏定义是在预处理阶段做字符串的替换,而const是在编译时。类型和安全检查不同。宏定义没有类型,不做任何类型检查;const常量有自己的类型,编译时作类型检查。实际使用中,应用const替换宏定义,减少犯错误概率。2、malloc的底层实现是怎样的?free是怎么回收内存的?malloc函数的实质是它有一个将可用的内存块连接为一个长长的列表的空闲链表。调用malloc函数时,它沿着链表找到一个大到足以满足用户请求

2021-02-03 11:03:48 399

原创 堆习题整理

堆模板AcWing 839. 模拟堆#include<bits/stdc++.h>using namespace std;const int N = 1e5+5;int n, h[N], Size, cnt;//ph[x]表示第x次插入的元素在堆中的下标为ph[x]//hp[x]表示在堆中下标为x的元素是第hp[x]次插入的 int ph[N], hp[N];void swapall(int u, int t){ //交换两者对应插入顺序的所在位置 swa

2020-05-18 22:54:57 370

原创 清华数据结构(上) PA1 & PA2

范围查询清华OJ不允许用stl,先写一个快排将数组排序。然后二分出<= y的秩最大的数,再二分出>= x的秩最小的数。#include <iostream>using namespace std;const int N = 5*1e5+10;int a[N], m, n;int l, r, mid, x, y, rt;void quick_sort(int l, int r){ if(l >= r) return; int i = l-1, j = r+1,

2020-05-14 22:57:56 654

原创 二叉搜索树

面试题 04.06. 后继者如果 p 大于当前节点的值,说明后继节点一定在右子树如果 p 等于当前节点的值,说明后继节点一定在右子树如果 p 小于当前节点的值,说明后继节点一定在左子树或自己就是递归调用左树,如果是空的,说明当前节点就是答案,否则已在左树中找到答案class Solution {public: //寻找第一个大于p的节点 TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {

2020-05-14 11:03:48 86

原创 二叉树的遍历

先序遍历(迭代版)自上而下对左侧分支访问的同时将右子树根节点入栈,自下而上对右子树遍历。class Solution {public: stack<TreeNode*> stk; vector<int> pre; void travelLeft(TreeNode* x){ while(x){ stk.push(x->right); pre.push_back(x->val);

2020-05-13 18:48:13 117

原创 栈和队列

栈的应用逆序输出:输出次序与处理过程颠倒;递归的深度和输出长度不易预知。如:进制转换。延迟缓冲:线性扫描算法模式中,在预读足够长后,方能确定可处理的前缀。如:括号匹配。递归嵌套:具有自相似性的问题可递归描述,但分支位置和嵌套深度不固定。如:栈混洗。栈式计算:基于栈结构的特定计算模式。如:RPN。LeetCode504. 七进制数class Solution {public: char digit[7] = {'0', '1', '2', '3', '4', '5', '6'};

2020-05-12 18:30:10 78

原创 双指针算法习题

LeetCode167. 两数之和 II - 输入有序数组核心:挖掘单调性。(同时题目保证解是唯一的)当两数之和大于target,固定 i 则 j 只有可能往左移,固定 j 则 i 只有可能往右移。class Solution {public: vector<int> twoSum(vector<int>& nums, int t) { int n = nums.size(); for(int i = 0, j = n-1; i

2020-05-08 21:18:50 156

原创 并查集习题整理

并查集模板基本原理:用一棵树来表示一个集合,树根节点是集合编号。每个节点存储用 来存储父节点,例如 f [a] 表示a的父节点。这样可以在O(1)时间内合并两个集合,O(1)时间内询问两个元素是否在一个集合中。 //需要初始化为-1 int p[N]; int find(int x){ //p[x]若为负数则是根节点,负数的绝对值代表集合元素的个数 if...

2020-05-06 11:16:25 452 1

原创 哈希表习题整理(1)

哈希表模板(来自acwing算法基础课)1.拉链法int h[N], e[N], ne[N], idx; // 向哈希表中插入一个数 void insert(int x) { int k = (x % N + N) % N; e[idx] = x; ne[idx] = h[k]; h[k] = idx +...

2020-05-06 10:08:06 1085

原创 动态规划习题整理(1)

1. LeetCode53. 最大子序和状态表示:f[i]表示以第 i 个元素结尾的所有连续子数组的最大值。状态转移:f[i] = max(f[i-1], 0) + nums[i]。f[i]可划分为两部分,以第 i -1个元素结尾的所有连续子数组加上第i个元素,或者只选用第 i 个元素。答案为所有f[i]中的最大值。优化:由于f[i] 在计算时只会用到f[i-1],则sum在第(i - 1)...

2020-05-05 17:54:32 119

原创 dfs+回溯习题整理(1)

1.LeetCode17. 电话号码的字母组合搜索顺序:按照给出的数字依次进行搜索,对于每一个数字枚举它选用每一个字母的方案。回溯:当下一个字符串已经枚举完成时,需要更新当前字符串,此时需要进行回溯。然后进行枚举,到当前字符串的下一个元素。第一次写时,循环的意义没有考虑清楚,这个做法的循环是枚举当前字符串的每个字符,而不是下一个字符串的每个字符。class Solution {publ...

2020-05-05 00:47:47 256

原创 字符串处理习题(1)

1.LeetCode38. 外观数列题目读懂就好做了class Solution {public: string countAndSay(int n) { string s("1"), t; for(int i = 1; i < n; i ++){ t = ""; for(int j = 0; j ...

2020-05-02 18:30:52 328

原创 二叉树习题整理(2)

11.acwing38. 二叉树的镜像class Solution {public: void mirror(TreeNode* root) { if(!root) return; swap(root->left, root->right); mirror(root->left); mirror...

2020-05-02 09:32:36 179

原创 二叉树习题整理(1)

1.leetcode98.验证二叉搜索树class Solution {public: //根节点的取值范围是minv~maxv。long long防int溢出。 bool dfs(TreeNode* root, long long minv, long long maxv){ if(!root) return true; if(root->va...

2020-05-01 18:21:52 324 1

原创 pat甲级1087 All Roads Lead to Rome (30分)

A1087经验pat的用字符串作为顶点构图的题似乎都不会卡map的时间(目前没遇到过)。这个题做的比较成功,用时43min,几乎没有调试就过了。#include <bits/stdc++.h>using namespace std;const int N = 205, inf = 0x3f3f3f3f;int n, k, id;map<string, int&g...

2020-03-22 10:03:51 166

原创 pat甲级1072 Gas Station (30分) floyd or dijkstra

A1072经验教训审题存在很大问题:没有注意到gas station和house不是一个数量级的,使用floyd算法最后一个测试点会超时。而且对于择优条件的审查经常出错,本题在所有方案的最近house距离中选择最大的那个方案,若相同选择到所有房屋距离最短的那个,若相同选择下标最小的那个。floyd算法的d[][]初始化。自己到自己是0,若两点有边则初始化为边长,其余为无穷大。无需用g[][...

2020-03-22 00:21:36 216

原创 pat甲级1076 Forwards on Weibo (30分) 图BFS

A1076#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10, M = 1e5 + 10;int h[N], e[M], ne[M], idx;int n, k;bool st[N];void add(int x, int y){ e[idx] = y; ne[idx] = h[x];...

2020-03-21 21:31:41 71

原创 pat甲级A1034 Head of a Gang (30分) 图DFS

A1034开始建图的时候考虑用字符串哈希,但后来看算法笔记发现map也能过就直接用map写了。#include <bits/stdc++.h>using namespace std;const int N = 1e4 + 10, M = 2e8 + 10;int h[N], e[M], ne[M], w[N], idx;int n, k;bool st[N];void...

2020-03-21 21:29:33 78

原创 pat甲级 A1021 Deepest Root (25分) DFS+并查集

A1021DFS求“树”的最大高度#include <bits/stdc++.h>using namespace std;const int N = 1e4+10;int f[N], h[N], e[2*N], ne[2*N], idx;int n, m, k, mx;bool st[N];int cnt[N];typedef pair<int, int&gt...

2020-03-21 21:23:06 115

原创 pat甲级A1013 Battle Over Cities (25分) 并查集+dfs

思路题目要求去掉一个顶点后,需要添加多少条边使得剩下的所有顶点再次连通。可转化去掉一个点后,图中有多少个连通块。添加边数为连通块数减一。连通块可用并查集表示。将去掉顶点的状态设为已遍历,这样在dfs中,每个顶点遍历不到它,也不能通过它到达其他顶点,相当于去掉这个顶点。#include <bits/stdc++.h>using namespace std;const in...

2020-03-21 21:16:27 81

原创 C语言中字符串和字符数组以及实数的相互转换

int main(){ //char数组可自动转化为字符串,可直接赋值 char ch[20] = " jakjfdkajkfljafsn"; string s = ch; cout << s << endl; //字符串化成char数组,c_str()返回该字符串的首地址 printf("%s\n",s.c_str()); //数字化成字符串 s...

2020-03-21 12:34:04 1880

原创 pat甲级A1030 Travel Plan (30分) dijkstra + dfs

A1030堆优化dijkstra + dfs教训这种需要考虑边上一些属性来在最短路中选最优解的题目不宜使用邻接表来存储图,否则在记录每个点的前驱时,还需要存入相应的边,代码写的很难看。代码#include <bits/stdc++.h>using namespace std;const int N = 505, M = 5e5+10, inf = 1e9;int h[...

2020-03-20 14:58:09 146

原创 pat甲级1018 Public Bike Management (30分) 最短路径+DFS

甲级A1018朴素dijkstra + DFS#include <bits/stdc++.h>using namespace std;const int N = 105, inf = 0x3f3f3f3;int g[N][N], w[N], d[N];int Cmax, n, m, Sp, bringin = inf, takeback = inf;bool st[N]...

2020-03-19 22:18:20 107

原创 PAT甲级1003 Emergency (25分) 最短路径

pat甲级1003堆优化dijkstra#include <bits/stdc++.h>using namespace std;const int N = 505, M = 1e6 + 10, inf = 0x3f3f3f3f;int h[N], e[M], ne[M], team[N] ,w[M], idx; bool st[N];int n, m, ori, des...

2020-03-19 20:03:32 140

空空如也

空空如也

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

TA关注的人

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