自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 继承中的构造函数与析构函数输出顺序

// 测试多态的实现中,继承见输出语句的顺序问题#include<iostream>using namespace std;// B类继承A类,测试输出语句顺序class A {public: A() { cout << "A" << endl; } ~A() { cout << "删除A的对象" << endl; }private: int names;};class B : public A {public:

2021-10-20 17:10:38 185

原创 堆排序实现

//若树的结构是完全无序的,此时调整为大顶堆需要从 最后位置的叶子节点 的 父节点开始调整.并每次下标减一,直到到达第0个位置;大概调整顺序是从倒数第二层(具体位置取决于叶子节点的位置)//然后每次节点位置-1实现调整#include<iostream>#include<algorithm>using namespace std;void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j

2021-09-27 16:36:49 118

原创 LINUX

1、分析日志t.log(访问量),将各个Ip地址截取,并统计出现次数,并按从大到小排序cat t.txt | cut -d ‘/’ -f 3 | sort |uniq -C| sort -nr解释:以 ‘/’ 为标志分割, 3 是指取得分割的第三个结果, -nr表示结果按逆序排序2、统计连接到服务器的各个Ip情况,并按连接数量从大到小排序netstat -an | grep ESTABLISHED | awk -F " " ‘{print $5}’ | cut -d “:” -f 1 | sor

2021-08-29 10:50:12 152

原创 struct 构建二叉树

typedef struct TreeNode { int val; TreeNode *left; TreeNode *right; struct TreeNode(int x) :val(x), left(nullptr), right(nullptr) {} struct TreeNode(int x, TreeNode *left, TreeNode *right) :val(x), left(left), right(right) {}}*Tree;int main() { //

2021-08-29 10:11:38 241

原创 二叉搜索树的查找

给定一个二叉搜索树,查找比指定target大的最小值&&查找比指定值target小的最大值//给一个二叉搜索树,查找比指定值target大的最小值;查找比指定值target小的最大值#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//定义树结构typedef struct TreeNode { i

2021-08-29 10:10:12 512

翻译 字符串按 字符/字符串 分割

//按 ","分割字符串#include<iostream>#include<vector>#include<string>#include<cstring>#include<sstream>#include<algorithm>using namespace std;/* 使用stringstream流,分割 *///1、void Stringsplit(string str, const const char

2021-05-20 14:48:01 1097

原创 C++ 常用排序查找算法 1

C++ 实现常用算法排序、二分查找、树(高度、前中后层序遍历)、图的遍历、最短路径、最小生成树、求最大公约数、数制转换、水仙花数、分治算法、贪心算法、动态规划算法、回溯算法、朴素贝叶斯分类算法、斐波那契数列、N皇后、快速幂、汉诺塔问题、回文检查、判质数#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//快排//

2021-05-13 22:26:01 218

原创 字符串匹配完整版

//在字符串中找到子字符串第一次出现的位置/* 给定两个字符串str1和str2,找到str2在str1中第一次出现的位置,返回下标。*///#include<iostream>//#include<vector>//#include<string>//using namespace std;/////* 以下函数可以输出子串第一次的位置 */////int findSubstring(string masterstring,string tests

2021-05-09 18:34:44 325

原创 网格从起点到终点的最短路径-- 动态规划

利用动态求解;定义二维矩阵dp[i][j] 表示到坐标(i,j)的最短距离;初始dp[1][1] = 1;利用sort排序,使得从起点出发;如果出发点不是起点,则输出-1;代码如下:/* 网格*/#include <vector>#include <algorithm>#include <iostream>using namespace std;//以下代码为了排序,但如果是升序,直接调用sort就可以实现//bool cmp(vector.

2021-05-09 16:13:04 1707

原创 map 按值排序 && string 容纳的最长字符 2^16

求字符串是否是质数串#include<iostream>#include<string>#include<map>#include<vector>#include<algorithm>using namespace std;typedef pair<char, int> PAIR;//定义重载的sort函数bool cmp_val(const PAIR &left,const PAIR &right

2021-05-08 22:26:44 334

原创 最小生成树+最短路径

假设要在n个城市之间建立通信连落网,则联通n个城市只需要n-1条线路。n个城市之间都可以建立一条线路,最多可能设置n(n-1) / 2条线路,如何在这些可能的线路中选择 n-1 条,使得总的耗费太小?这个问题就是构造联通网的最小代价生成树的问题;普利姆算法和克鲁斯卡尔算法是利用MST性质构造最小生成树的算法。普利姆算法直接的理解是:从已经选择的顶点中选择最小的边(边的选择是根据已经选择的顶点决定的);克鲁斯卡尔算法的理解:从当前网络图每次选择最小的边加入(边的选择是当前网络中的最小边)。最小生成树要

2021-05-02 14:53:39 549

原创 字符串string 一次读取一行带有空格的数据 + 按空格分割字符串

cin 不支持空格读取!!!若想读取控制台输入的带有空格的一行数据,需要用其他函数:例如: getline(cin,str);**注意!!避坑!**若getline(cin,str);使用在一个cin 语句的下面,则该行getline(cin,str)将默认读取上一行的内容;此时也不能再输入;解决办法:在 cin 语句后面加入 cin.ignore();void getwholeline(){ string s; cin>>s; string str; //此时若想读取一整行数

2021-04-28 21:54:33 1810

原创 利用二进制解决问题 && 十进制转为二进制

拼多多笔试题–多多培养细胞#include<iostream>#include<string>#include<vector>#include<cmath>#include<algorithm>using namespace std;//int feeddaynum(int feedday, int shengyu,vector<int>& day) {// //喂养的天数 剩余的细胞数// if (sh

2021-04-28 11:02:30 149

原创 智能指针

内存管理时C++中一个常见的错误和bug来源,在大部分情形中,这些bug来自动态分配内存和指针的使用;智能指针的使用,可以帮助管理动态分配的内存。其来源一个实时:栈要比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理,智能指针结合了栈上变量的安全性和堆上变量的灵活性。C++11标准库中含有四种智能指针:auto_ptr(不要使用)、unique_ptr(single ownership)、shared_ptr(shared ownership)、weak_ptr(no ownership).头

2021-04-27 16:04:03 49

原创 多线程的创建

线程的多种创建方式C++线程创建的过程 – 普通函数的方式:2.1 包含头文件 #include2.2 创建线程:调用thread 类去创建一个线程对象注意点:创建一个线程,不做处理,会调用abort函数终止程序2.3 join函数 加入、汇合线程到主线程,阻塞主线程;等待子线程执行结束,才会回到主线程注意:一个线程只能join()一次,join()多次会引发中断2.4 detach(); 函数分离,打破依赖关系;把子线程驻留后台。 注意与join()的区别;当线程detach()后,

2021-04-27 10:21:08 61

原创 单例模式--懒汉模式、饿汉模式

单例模式是一个类只有一个实例化对象;为什么需要单例模式?有的类比较复杂,频繁的创建和销毁类的对象,并且这些对象完全是可以复用的话,将会造成一些不必要的性能浪费。单例模式包含了关于线程安全、内存模型、类加载机制等一些比较核心的知识点。单例模式包括两种:懒汉模式:线程不安全的;如果有两个线程s1,s2;如果正好在s1判空的位置交付了cpu的使用权,s2执行,此时s2做判断时,判空操作也是成立的,此时会new一个对象;而s2执行结束后,s1拿回cpu的使用权,而正好线程s1之前暂停的位置就是判空之后,这

2021-04-27 10:01:56 82

原创 字典顺序最小表示法

#include<iostream>#include<string>#include<vector>#include<set>#include<map>#include<algorithm>using namespace std;struct ListNode { int val; struct ListNode *next; };/* 求字典顺序最小表示法的排列; 并返回结果链表 最小表示法

2021-04-24 11:20:33 143

原创 根据class 构建二叉树 --根据二叉树构建双向链表

/* 36、二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。 要求不能创建任何新的节点,只能调整树中节点指针的指向。*/#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;// Definition for a Node.class Node {public: int

2021-04-23 15:23:43 98

原创 携程建房子问题

/* 携程--建房子*//*#include<iostream>#include<string>#include<sstream>#include<cstring>using namespace std;//判是否都是数字bool Allisnum(string str) { //是数字时返回true; for (int i = 0; i < str.size(); i++) { int tmp = (int)str[i]

2021-04-16 20:07:06 59

原创 图的广搜+深搜

对于树而言,深搜指的是前序、中序、后序遍历;广搜指的是利用队列实现的层序遍历;对于图而言,深搜一般指针对于邻接矩阵或者邻接表的深搜,广搜是针对于邻接矩阵或者邻接表的层序遍历;以下代码实现邻接矩阵的深搜和广搜://图#include<iostream>#include<vector>#include<cstdio>using namespace std;//深搜--邻接矩阵实现int dfs(int cur,int count,int n, vect

2021-04-15 10:41:22 155

原创 青蛙跳石子

青蛙跳石头游戏有n块石头分别在x轴的0,1,…,n-1位置,一致青蛙在石头0,想跳到石头n-1,如果青蛙在第i块石头上,它最多可以向右跳距离ai,问青蛙能否跳到石头n-1?//青蛙跳石头游戏#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//每次向右做多跳距离ai个长度,问青蛙能否跳到石头n-1?/* 1、转移

2021-04-14 23:01:09 752

原创 数据结构-树

树#include<iostream>#include<vector>#include<queue>using namespace std;//定义树结构//如果不加typedef,那么定义结构变量时必须每次加上struct,也就是写成struct treenode 变量名;//而这里就可以直接定义:treenode 变量名;//*tree是一个指向结构体自己的指针,也就是等价于:typedef struct treenode *tree;typede

2021-04-14 17:06:47 34

原创 字串型的串流

通过一个例子了解字符串型的串流:/*序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树.*//*根据图中要求,这个是二叉树,当当前节点的左右孩子都为空的时候也会序列化为null,null反序列化时当前节点的后面两个节点就是左右分支;这个题的难点在于反序列化时,怎么判断是否是叶子节点;会发现序列化节点的结果是层序遍历的结果;并且序列化的结果是字符串的形式//如果没有特别的需要,尽量使用string会比较方便;stringstream是C++提供的另一个字串型的串流,和之前的io

2021-03-27 17:43:05 109

原创 二叉树的复制 / 树的镜像树

二叉树的镜像直接转换法:并未构建树,只是对原来的树的结构做了调整,把左节点换到了右节点的位置TreeNode* mirrorTree(TreeNode* root) { if (root == nullptr) return nullptr; //left和right反序 TreeNode* temp = root->left; //临时保存left节点 root->left = mirrorTree(root->right); root->right = mirro

2021-03-25 15:55:14 168

原创 string字符串

/*替换空格:实现一个函数,把字符串中的空格替换为 %20输入:s = “We are happy.”输出:“We%20are%20happy.”///主要需要考虑替换后字符串长度会增加/ 如果在原地替换,需要确保字符串s有充足的长度原地替换,需要先遍历字符串中空格的数量,然后将数组长度修改至:s.size()+2空格数;因为每替换一个空格,需要增加额外两个空间然后从字符串尾向前移动,找到空格,将0添加至s[j],2添加至s[j-1],%添加至s[j-2];int len = s.size

2021-03-22 13:29:04 49

转载 单链表创建中关于头结点的问题

文章来自于:博客以下内容以尾插法为例分析:创建带头结点的链表:Node *Head,*r,*LNew; // r 等同与上图中的L/*申请节点*/Head = (Node*)malloc(sizeof(Node));//带头结点r = Head;r->next = NULL;//初始赋值 for(int i = 0; i < 10; ++i){ /* 申请节点 */ LNew = (Node *)malloc(sizeof(Node));

2021-03-08 17:10:14 347

转载 for循环的五种使用方法

for eachstd::for_eachfor infor :for转载于:http://www.cnblogs.com/music-liang/

2021-03-05 16:36:10 403

原创 数据结构 - 栈

栈 stack栈 是仅在表尾进行插入和删除的线性表。把允许插入和删除的一端称为栈顶。栈的特点:先进后出既然栈是线性表的特例,则栈的顺序存储其实也是线性表顺序存储的简化,简称顺序栈;对于栈这种只能一端插入删除的线性表来说,我们一般把下标为0的一端作为栈底比较好,因为首元素都存在栈底。假设有一个栈,Stacksize=5,则栈普通情况,空栈和栈满的情况示意图如下图所示:栈的基本操作代码如下://顺序栈的实现#include <iostream>#include <st

2021-03-04 17:04:53 120 1

原创 数据结构--队列

队列 — queue队列与栈一样,是一种线性存储结构,特点:先进先出;队尾添加元素,对头删除元素队列的操作:入队:通常命名为push()出队:通常命名为pop()求队列中元素个数判断队列是否为空获取队首元素队列的分类根据存储结构划分:顺序存储结构、链式存储结构顺序存储结构特点:事先要确定队列的大小,不支持动态分配内存空间链式存储结构特点:可以不需要事先知道队列的大小,支持动态分配存储空间,插入和删除操作比较耗时代码1实现如下://循环队列初始化、判空、判满、入队、出队、输出队列

2021-03-04 16:10:33 67

翻译 数据结构--链表

链表链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有头指针,一般为heae,存放的是一个地址。链表节点分为两类,头节点和一般节点,头节点是没有数据域的。链表的每个节点都分为两部分,一个数据域,一个指针域。以上内容摘自:https://www.cnblogs.com/ariel-dreamland/p/10469696.html若线性表为空表,则头节点的指针域为空。链表分为:单链表、循环链表、双向链表

2021-03-03 09:19:33 501

翻译 深搜广搜算法

深搜 DFS从图中的某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直到图中所有和v有相通的顶点都被访问到。(此时说的图为连通图)对于非连通图,只需要对它的连通分量进行深度优先遍历,即在先前一个顶点进行一次深度优先遍历搜索后,若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为开始,重复上述过程,直至图中所有顶点都被访问到为止。//邻接矩阵方式typedef int Boolean; //true falseBoolean visited[MAX]; //

2021-03-01 13:22:49 231

原创 表达式求值

表达式求值以求解2+5*(3-2)为例,按照数据结构课本上的思路,是创建两个栈,一个数字栈,一个符号栈,然后根据入栈的符号的优先级来不断出栈进行计算,理解起来是挺方便的,但是代码记起来有点复杂,尤其是还需要两个栈。近日看了一个老师的另外一种解法,利用递归的方式解决,不需要利用栈,听起来贼神奇,并且也是比较好理解和记忆的,下面介绍下另外一个老师的方法。对于表达式2+5*(3-2)而言,我们先判断这是一个什么式子,按照以往的经验,我们会说这是一个加法式,因为加法运算是这个式子中最后计算的。 ”+“把式子

2020-12-27 16:43:23 141

原创 KMP算法

#KMP算法真実はいつも一つ—KMPKMP这个难解的案子困扰了众多干警与侦探,当前在我接手这个案子后,翻阅古籍,不断查阅"证据",极限48h,终于,找出了些蛛丝马迹,为记录这段时间的辛苦,为给以后的我以启发,写下这点见解。前世今生—前世说KMP之前,我们先来说下**朴素的模式匹配算法***:在一个大字符串S中找子串T的定位操作。假设从主串S="goodgoogle"中,找到T=“google”*这个子串的位置,我们通常按照以下步骤进行:1)从主串S第一位开始,依次匹配,前三个字母都可以匹配成功,

2020-11-26 22:10:49 134

空空如也

空空如也

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

TA关注的人

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