c++基础
文章平均质量分 50
程序媛的被窝
这个作者很懒,什么都没留下…
展开
-
动态规划之求一个序列的最长递增子序列
dp[i] 必须以i结尾的情况下,最长递增子序列的长度思路2: O(n*logn)只是对第一步建立dp的过程进行了优化,第二部不变建立辅助数组h,h[i]表示,长度为i+1的递增子序列的最小末尾,所以说h数组的值均来自原数组dp依旧表示序列以i元素结尾的情况下,最长递增子序列的长度h用黑色字体,h的更新用品红底色h的更新策略为:在将正在处理的元素和h中的元素进行比较(二分查找的方法),找到第一...原创 2018-05-01 09:55:29 · 572 阅读 · 0 评论 -
字符串匹配kmp
算法原理:http://wiki.jikexueyuan.com/project/kmp-algorithm/define.html#include<iostream>#include<string>#include<string.h>using namespace std;//给定两个字符串,判断其中一个是否包含另一个,如果包含则返回起始位置//n...原创 2018-05-02 22:27:52 · 133 阅读 · 0 评论 -
使用栈和队列模拟出栈,入栈过程
#include<stdio.h>#include<stack>#include<queue>//返回是或者否,所以用bool类型//形参数采用了引用的方式,更为高效bool check_is_valid_order(std::queue<int> &order){ //建立模拟栈, 和序列头进行比较 std::...原创 2018-05-03 15:46:36 · 735 阅读 · 0 评论 -
单链表求环的起始位置(Set)
#include<iostream>#include"ListNode.h"#include<set>//单链表求环,将该链表的节点地址依次进入集合中,然后第一重复的节点就是环开始的位置class Solution{public: int detectCircle(ListNode* l ){ std::set<ListNode...原创 2018-04-27 10:56:43 · 427 阅读 · 0 评论 -
单链表求环的起始位置(快慢指针)
#include<iostream>#include"ListNode.h"class Solution2{ public: ListNode* findCycle(ListNode* list){ ListNode* fast = list; ListNode* slow = list...原创 2018-04-27 11:24:19 · 482 阅读 · 0 评论 -
generate_rand_numbers
#include<iostream>#include<stdlib.h>#include<time.h>// int rand1to5(){ int num; srand(time(0)); num = rand() % 5 + 1; return num; }int rand1to7(){ int num ; do{ ...原创 2018-05-05 18:30:06 · 172 阅读 · 0 评论 -
将链表以某个数为界进行partition ( LeetCode 86)
#include<iostream>#include"ListNode.h"//把链表分为大于x和小于x的部分class Solution{public: ListNode* partitionList(ListNode* head, int x){ //定义两个临时指针,两个临时节点用来保持索引 ListNode a(0); ListNo...原创 2018-04-27 15:41:10 · 144 阅读 · 0 评论 -
STL 之 map 的使用
#include<iostream>#include<map>//在原来结构体的基础上添加了随机指针struct RandomList{ int label; RandomList *next, *random; RandomList(int x) : label(x), next(NULL), random(NULL){}};int ...原创 2018-04-27 16:56:32 · 105 阅读 · 0 评论 -
返回一个数组需要排序的最短长度
#include<iostream>#include<algorithm>using namespace std;int getMinLength(int* arr, int l){ if(arr == NULL || l < 2){ //一个元素无需排序 return 0; }//按照增序排列得话, 如果一个数组最后一位用MIN表示,没...原创 2018-05-05 19:47:11 · 160 阅读 · 0 评论 -
返回一个数组的左半部分和右半部分最大值差的绝对值
#include<iostream>#include<limits.h> //获取最小值#include<algorithm> //max,min头文件int maxABS1(int* arr, int l){ //数组传参把数组名和大小全部传递进去,避免退化 int MAX = INT_MIN; for(int i = 0; i < l...原创 2018-05-05 19:59:23 · 220 阅读 · 0 评论 -
知识点
1 Vsftpd配置vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字local_max_rate = 0: 本地用户使用的最大传输速度,单位为B/s, 0表示不限制速度,预设值为0anon_max_rate = 0:设置匿名登录者使用的最大传输速度,单位为B/s,0表示不限制速度,预设值为02 局部数组具有局部作用域,当函数调用结束之后,数组被操作系统销毁,回收了内存空间,里面的内容...转载 2018-05-06 14:26:37 · 177 阅读 · 0 评论 -
知识点2
1 类的大小(sizeof(A))类与结构一样都有字节对齐的问题, char 需要和就近的类型进行对齐类中的普通函数不占用类的大小类中虚函数占用一个地址位宽(4或8, 虚函数表指针),且不论有多少个虚函数,一共占这么多类中的常量不占用类的大小,const static / enum{ q =1, p = 2};类中static修饰的变量不占用类的大小,因为放在静态区域子类的大小等于子类新增的加上父...原创 2018-05-07 13:54:22 · 228 阅读 · 0 评论 -
二叉树的创建与递归遍历
#include<iostream>#include<vector>using namespace std;//和链表的数据结构一样struct TreeNode{ int value; TreeNode* left; TreeNode* right; TreeNode(int x):value(x),left(NULL),ri...原创 2018-05-07 16:21:38 · 183 阅读 · 0 评论 -
判断一个数是否在二叉树中,如果存在返回真
#include<iostream>#include<vector>using namespace std;//和链表的数据结构一样struct TreeNode{ int value; TreeNode* left; TreeNode* right; TreeNode(int x):value(x),left(NULL),ri...原创 2018-05-07 16:53:38 · 1597 阅读 · 0 评论 -
知识点3
1 运算符的重载 (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。 (2)单目运算符最好重载为成员函数。 (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。 (4) 对于其它运算符,建议重载为...原创 2018-05-08 16:28:35 · 512 阅读 · 0 评论 -
知识点5
1 查找grep ,sed 都属于文本的查找,过滤的文本搜索工具。locate,find属于查找文件的的工具2 进程一个进程由三个部分组成:进程控制块PCB、数据和程序。在UNIX中,一个进程也由三个部分组成:进程控制块、数据段和共享正文段,并有其自身的不同含义。进程运行时用到的数据以及工作区,构成了一个进程的数据段。要注意的是,如果进程执行的程序是不能被共享的,那么也把它归入到数据段中。为了管理...原创 2018-05-16 14:19:33 · 178 阅读 · 0 评论 -
剑指offer 之 二维数组中查找一个数
class Solution { //难点在于搜索策略需要排除整行或整列来减小时间复杂度,需要注意二维数组的行列和当前坐标的关系public: bool Find(int target, vector<vector<int> > array) { //传入数组和目标,返回有无 bool found = false; int rows = ...原创 2018-06-08 10:47:22 · 221 阅读 · 0 评论 -
用两个队列实现一个栈
#include<iostream>#include<queue>//用两个队列实现一个栈//利用临时队列调换元素次序class MyStack{private: std::queue<int> data;public: void push(int x) { std::queue<int> temp; //先将待存...原创 2018-04-20 21:13:04 · 112 阅读 · 0 评论 -
知识点4
1 网络系统分类核心系统:通信子网,比如网络中路由器、交换机、中继器等各种通信设备;边缘系统:资源子网,比如网络中的主机,可联网外设等终端。2 DNSDNS协议关于UDP和TCP的选择通常为以下两种情况:(1)若DNS客户程序事先知道响应报文的长度大于512B,则应当使用TCP连接; NOTICE:主域名服务器与辅助域名服务器在进行区域传送时,通常数据量都比较大,所有DNS规定...原创 2018-05-09 13:16:18 · 247 阅读 · 0 评论 -
动态规划之最长公共子序列
原创 2018-05-01 10:04:35 · 114 阅读 · 0 评论 -
动态规划——求最长公共子串
原创 2018-05-01 10:17:53 · 215 阅读 · 0 评论 -
动态规划——字符串替换
原创 2018-05-01 10:34:06 · 576 阅读 · 0 评论 -
链表逆序
#include<iostream>struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){} //结构体定义了成员变量列表初始化的时候要用初始化列表初始化 //初始化列表有空括号,没有分号};//结构体/类/共用体的成员运算符i//一个链表的节点的n...原创 2018-04-19 22:40:55 · 123 阅读 · 0 评论 -
判断一个链表回文结构
思路1:额外空间复杂度O(n)申请栈,全部压栈之后,弹出进行比较思路2:额外空间复杂度O(n/2)申请栈,利用快慢指针,快指针每次走2步,慢指针每次走1步,快指针指向空的时候,慢指针会到栈的中间,后续元素进行压栈操作,然后指针从最开始走,和堆栈元素进行比较思路3:额外空间复杂度 O(1)快慢指针,快指针走到末尾的时候,慢指针在中间,将慢指针的next置为NULL,快指针后半部分进行逆序操作,然后从...原创 2018-05-01 16:23:04 · 114 阅读 · 0 评论 -
判断一棵树是否包含另一棵树的结构
思路一:按照常规的方法进行遍历,找到相同的根节点之后一次比较孩子节点,失败则检查下一个节点时间复杂度为O(n*m)思路二:使用树结构序列化的方法,将两棵树进行相同方式的序列化,然后利用kmp判断子串,则可以得到结果,时间复杂度为O(m+n)这道题的可行性是:数结构的序列化和反序列化是一一对应的...原创 2018-05-01 16:27:31 · 343 阅读 · 0 评论 -
给定一个没有重复元素的数组,如何构建一棵树
对于正在处理的数,找到左右两边离该元素最近的比它大的两个数,取其中较小的数作为当前数的根节点建立树的过程用2张表实现,一张左表,一张右表比如3 4 5 1 2右表key value3 44 55 null1 22 null表的建立使用栈结构,保持栈中的元素大数在下,小数在上压入 3 压入4 弹出3 记录 3 4...原创 2018-05-01 16:39:11 · 680 阅读 · 0 评论 -
链表从m到n逆序
#include<iostream>struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){} //结构体定义了成员变量列表初始化的时候要用初始化列表初始化 //初始化列表有空括号,没有分号};class Solution2{ public:...原创 2018-04-20 10:20:49 · 313 阅读 · 0 评论 -
链表简介
链表是线性表的一种,每个节点分为数据域和指针域两部分:(1)数据域是该节点存放的数据(2)指针域中存放下一个节点的地址, 在概念图上表现为箭头数据结构只是在数据运算的过程中给数据建立的一系列规则,但是在数据存储上,依旧按照内存中数据存储的原则,也就是说并没有什么箭头指向,比如h=h->next, 称为h指向h的下一个节点,也可以说是将下一个节点的地址赋值给h的指针域,h中原来存放的位置被覆盖...原创 2018-04-20 10:31:12 · 140 阅读 · 0 评论 -
STL之set
查找两个数组中的公共元素#include<iostream>#include<set>int main(){ //定义一个集合 //集合主要有去重的功能,集合中的元素都是唯一的 std::set<int> test_set; int A[7]={1,2,3,4,5,6,7}; int B[12]={1,...原创 2018-04-20 11:05:43 · 136 阅读 · 0 评论 -
利用set判断两个链表是否相交
#include<iostream>#include<set>struct ListNode { int val; ListNode* next; ListNode(int x):val(x),next(NULL){} };int main(){ //定义一个集合 //集合主要有去重的功能,集合中的元...原创 2018-04-20 13:59:17 · 191 阅读 · 0 评论 -
查找两个链表的公共结点(链表法)
#include<iostream>struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(NULL){}};//计算每个链表的长度int Cal_list_len(ListNode* l) { int length=0; while(l) { ...原创 2018-04-20 14:39:29 · 696 阅读 · 0 评论 -
两个栈实现一个队列
栈是先进后出,队列是先进先出,那么需要另一个栈倒一下,把原来先进去的倒在上面,就可以实现了#include<iostream>#include<stack>class myQueue{private: std::stack<int> data; //数据成员被所有成员函数共享,可以直接使用public: void push(int x){ ...原创 2018-05-02 17:10:19 · 132 阅读 · 0 评论 -
实现一个可以返回最小值的栈
申请一个额外的栈空间,维护最小值,和数据栈同时进行push和pop即可#include<iostream>#include<stack>//成员函数不要和构造函数混淆//函数是否有形参和函数的返回类型没有关系class Min{public: void push(int x){ data.push(x); //...原创 2018-05-02 17:42:55 · 196 阅读 · 0 评论 -
矩阵(二维数组)子矩阵最大和
#include<iostream>#include<vector>#include<limits.h>#include<algorithm>using namespace std;//优化解法,O(N^3)int maxSum(vector< vector<int> > &arr){ if (arr....转载 2018-06-10 20:32:24 · 1918 阅读 · 0 评论