自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一练之unique-paths

unique-pathsOJ地址:unique-paths【方法】动态规划int uniquePaths(int m, int n) { // write code here int res[m][n]; //初始化 for(int i = 0; i < m; i++) { res[i][0] = 1; } for(int j = 0; j < n;

2020-07-31 21:03:41 199

原创 每日一练之triangle

triangleOJ地址:triangle【方法】动态规划int minimumTotal(vector<vector<int> > &triangle) { int n = triangle.size(); if(n == 0) return 0; for(int i = 1; i < n; i++) { for(int j = 0; j <

2020-07-31 20:08:34 268

原创 每日一练之word-break

word-breakOJ地址:word-breakbool wordBreak(string s, unordered_set<string> &dict) { int len = s.length(); vector<bool> v(len+1,false); v[0] = true; for(int i = 1;i <= len; i++) { for(in

2020-07-31 19:13:00 121

原创 Linux常规信号一览表

Linux 常规信号一览表SIGHUP:本信号在用户终端结束时发出,通常是在终端的控制进程结束时,通知同一会话期内的各个作业,这时他们与控制终端不在关联。比如,登录Linux时,系统会自动分配给登录用户一个控制终端,在这个终端运行的所有程序,包括前台和后台进程组,一般都属于同一个会话。当用户退出时,所有进程组都将收到该信号,这个信号的默认操作是终止进程。此外对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。SIGINT:程序终止信号。当用户按下CRTL+C时通知前台进程组终止进程。.

2020-07-31 14:03:33 2047

原创 Linux通信方式之信号

信号一、信号的机制A给B发送信号,B收到信号之前执行自己的代码,收到信号之后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为"软中断"。信号的特质:由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性。但对于用户来说,这个延时时间非常短,不易察觉。每个进程所收到的所有信号,都是由内核负责发送的,内核处理二、与信号相关的事件和状态产生信号按键产生,如:Ctrl+c、Ctrl+z

2020-07-31 13:38:04 148

原创 每日一练之二叉搜索树的第k个节点

二叉搜索树的第k个节点OJ地址:二叉搜索树的第k个节点这道题一定要检查方法一:递归的中序遍历二叉搜索树的中序遍历默认升序排列使用递归中序遍历二叉树,把每个节点放进一个一个vector内,返回下标为 k - 1 的节点即可 //中序遍历 void InOrderTraverse(TreeNode *root, vector<TreeNode *> &t) { if(root == nullptr) return;

2020-07-29 21:12:11 104

原创 每日一练之按之字形顺序打印二叉树

按之字形顺序打印二叉树OJ地址:按之字形顺序打印二叉树题目描述:给定一颗二叉树,假设根节点为第一层,按照奇数层,从左到右打印,偶数层,从右到左打印。【方法】层次遍历打印二叉树,用队列实现。vector<vector<int> > Print(TreeNode* root) { vector<vector<int>> res; if(root == nullptr) return res;

2020-07-29 19:19:23 111

原创 每日一练之翻转单词顺序列

翻转单词顺序列OJ地址:翻转单词顺序列方法一:单词拆分首先定义一个存放字符串的vector容器,然后将字符串按空格进行拆分,拆分成一个个单词,将其存放在 vector 容器中,如果遇到空格,也将空格当作一个字符串,存放入容器内,最后将容器中的字符串按照从后往前进行拼接,最后形成了目标字符串那么我们怎么拆分单词呢?设置一个索引 i ,从头到尾开始遍历字符串,i 指向的是当前正在考察的字符我们观察发现,当下标 i 指向的字符不是空格,但是 i+1 指向的字符是空格,那么表示遍历完一个单词

2020-07-29 18:54:13 158

转载 伤脑筋的TCP的三次握手和四次挥手

1. 三次握手三次握手其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,并同步连接双方的序列号和确认号,交换TCP窗口大小信息刚开始客户端处于Closed的状态,服务端处于Listen状态。进行三次握手:第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 STN_SENT 状态。首部

2020-07-29 14:57:20 293

原创 C++ 如何一次在堆上申请4G的内存?如何设计一个类只能在堆或者栈上创建对象?

1. 如何一次在堆上申请4G的内存?因为32位的环境下虚拟地址空间的大小只有4G,而光内核空间就需要1G,所以不可能申请得到,只有在64位的环境下才可以实现,只需要把执行环境改为64位即可#include <iostream>using namespace std;int main(){ void *p = new char[0xfffffffful]; cout << "new: " << p << endl; return 0;}【在

2020-07-29 10:37:02 401

原创 C++内存管理(二)之C++动态内存管理方式

一、C++内存管理模式1. new/delete 操作内置类型2. new/delete 操作自定义类型二、operator new与operator delete 函数1. operator new与operator delete 函数2. operator new与operator delete 的类专属重载(了解)三、new和delete的实现原理1. 内置类型2. 自定义类型四、定位new表达式(placement-new)(了解)五、常见面试题1. malloc/free和n

2020-07-29 10:23:04 133

原创 C++内存管理(一)之C语言动态内存管理方式

1. C/C++内存分布2. C语言中动态内存管理方式未完待续~~下一篇:C++动态内存管理

2020-07-28 21:06:22 206

原创 每日一练之左旋转字符串

左旋转字符串OJ地址:左旋转字符串方法一:使用 substr 函数【注意】substr(a, b) 截取的是字符串 [a, b),下标从0开始string LeftRotateString(string str, int n) { string res = ""; if(str == "") return res; res += str.substr(n, str.length()); res += str.s

2020-07-28 18:35:52 114

原创 每日一练之和为S的连续正数序列

和为S的连续正数序列OJ地址:和为S的连续正数序列方法一:穷举(暴力解法)求和为sum的连续子序列,可用暴力方法算法步骤:用指针 i 枚举目标序列的左边界用指针 j 枚举目标序列的右边界用指针 k 枚举区间 [i, j],来计算区间和,看是否等于目标sum。vector<vector<int> > FindContinuousSequence(int sum) { vector<vector<int>> res;

2020-07-28 18:15:22 131

原创 每日一练之数组中只出现一次的数字

数组中只出现一次的数字OJ地址:数组中只出现一次的数字方法一:哈希表法很显然的方法,遍历一遍数组,用map记录出现的次数,然后再遍历一遍数组,找出出现1次的数字void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if(data.size() == 0) return; unordered_map<int, int> map; fo

2020-07-28 15:34:26 145

原创 每日一练之二叉树的深度

二叉树的深度OJ地址:二叉树的深度方法一:分治法分治法简介:求一个规模为n的问题,先求左边规模大约为n/2的问题,再求右边规模大约为n/2的问题,然后合并左边,右边的解,从而求得最终解。具体可参考归并排序。步骤:求 pro(left, rigth) -> int先求pro(left, (left+right)/2) -> lval再求pro((left+right)/2 + 1, right) -> rvalmerge(lval, rval) -> result这里

2020-07-27 21:11:24 234

原创 每日一练之两个链表的第一个公共节点

两个链表的第一个公共节点OJ地址:两个链表的第一个公共节点【解题思路】题目要求是单链表,所以如果有交点,则最后一个链表的节点地址一定是相同的求第一公共节点,本质是让长的链表先走abs(length1-length2)步,后面大家的步调一致,往后找第一个地址相同的节点,就是题目要求的节点所以需要各自遍历两次链表ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1 == nu

2020-07-27 20:50:23 125

原创 每日一练之把数组排成最小的数

把数组排成最小的数OJ地址:把数组排成最小的数方法一:暴力破解法void perm(int pos, vector<int> &num, string &ret) { if(pos == num.size() - 1) { string tmp = ""; for(int k : num) { tmp += to_string(k);

2020-07-27 20:27:09 142

原创 每日一练之回文数索引

回文数索引OJ地址: 回文数索引#include <iostream>#include <string>using namespace std;int isPlalindrome(string &str){ int i, j; i = 0; j = str.length() - 1; while(i <= (str.length() - 1) / 2 && j >= str.length() / 2)

2020-07-27 19:00:31 61

原创 每日一练之连续子数组的最大和

连续子数组的最大和OJ地址:连续子数组的最大和方法一: 递归int getSum(vector<int> &arr, int k) { if(k == 0) return arr[0]; return max(getSum(arr, k - 1) + arr[k], arr[k]); } int FindGreatestSumOfSubArray(vector<int> array) {

2020-07-27 15:55:23 177

原创 每日一练之最小的k个数

最小的k个数Oj地址:最小的k个数1. 排序直接排序,然后取前k小数据。vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; if(input.size() == 0 || k > input.size() || k == 0) return res; sort(input.be

2020-07-27 14:43:05 173

原创 每日一练之字符串的排列

字符串的排列OJ地址:字符串的排列 bool ishas(vector<string> &res, string &str) { for(auto it = res.begin(); it != res.end(); ++it) { if(*it == str) return true; } return false; } void

2020-07-27 13:05:28 110

原创 网易2018C++笔试

编程题小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。并且小Q对于能否被3整除这个性质很感兴趣。小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。【解题思路】这道题可以通过找规律来实现#include<iostream>using namespace std;int main(){ long l, r; cin >> l >> r; .

2020-07-26 21:52:01 468

原创 Linux线程通信之共享映射区

IPC方法(InterProcess Communication)Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区中把数据读走,内核提供的这种机制称为进程间通信在进程间完成数据传递需要借助os提供的特殊方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。现如今常用的

2020-07-26 12:01:41 417

原创 每日一练之二叉树中和为某一值的路径

二叉树中和为某一值的路径OJ地址:二叉树中和为某一值的路径void dfs(TreeNode *root, int sum, vector<int> &path, vector<vector<int>> &res) { path.push_back(root->val); if(root->val == sum && !root->left && !root-&

2020-07-25 19:02:30 81

原创 每日一练之二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列OJ地址:二叉搜索树的后序遍历序列bool helpVerify(vector<int> sequence, int start, int root){ //找到左右分界点 int gap; for(int i = 0; i < root; i++) { if(sequence[i] > sequence[root]) {

2020-07-24 14:38:52 68

原创 每日一练之层序遍历

从上往下打印二叉树OJ地址:从上往下打印二叉树【解题思路】借助队列实现这道题就是一个模板题,对队列的使用。因为要满足先进先出的特性。1. 初始化:一个队列queue<TreeNode*> q, 将root节点入队列q2. 如果队列不空,做如下操作:弹出队列头,保存为node,将node的左右非空孩子加入队列做2,3步骤,直到队列为空这道题的思路可以实现二叉树的镜像(二叉树的镜像)如果没有懂上面的思路的话,可以参考每日一练之二叉树的镜像的非递归版本,里面有图文介绍 vector

2020-07-24 13:38:16 74

原创 每日一练之栈的压入、弹出序列

栈的压入、弹出序列OJ地址:栈的压入、弹出序列 bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() == 0) { return false; } stack<int> s; int i, j; i = j = 0; while(i < p

2020-07-24 13:17:00 135

原创 Linux通信之管道通信

IPC方法(InterProcess Communication)Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区中把数据读走,内核提供的这种机制称为进程间通信在进程间完成数据传递需要借助os提供的特殊方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。现如今常用的

2020-07-24 11:05:56 269

原创 每日一练之删除一个有序单链表中的重复节点

删除一个有序单链表中的重复节点OJ地址:删除一个有序单链表中的重复节点 ListNode* deleteDuplication(ListNode* pHead) { if(pHead == nullptr) return nullptr; ListNode *n1, *n2, *n3; n1 = nullptr; n2 = pHead; n3 = n2->next; w

2020-07-24 08:27:04 407

原创 每日一练之二叉树的镜像

二叉树的镜像OJ地址:二叉树的镜像方法一:递归void Mirror(TreeNode *pRoot) { if(!pRoot) return; swap(pRoot->left, pRoot->right); Mirror(pRoot->left); Mirror(pRoot->right); }方法二:非递归版本void Mirror(TreeNode *pRoot)

2020-07-23 20:18:55 83

原创 每日一练之树的子结构

树的子结构OJ地址:树的子结构bool dfs(TreeNode *r1, TreeNode *r2) { if(r2 == nullptr) return true; if(r1 == nullptr) return false; //必须根节点的值相同并且左子树的值相等并且右子树的值相等,最后才找到了 return r1->val == r2->val &&a

2020-07-23 19:23:30 164

原创 每日一练之链表合并

链表合并OJ地址:链表合并【方法】初始化:定义cur指向新链表的头结点【操作】如果p1指向的结点值小于等于p2指向的结点值,则将l1指向的结点值链接到cur的next指针,然后p1指向下一个结点值否则,让p2指向下一个结点值循环步骤1,2,直到p1或者p2为nullptr将p1或者p2剩下的部分链接到cur的后面ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode *newHead = n

2020-07-23 16:29:18 95

原创 每日一练之反转链表

反转链表OJ地址:反转链表方法一:原地反转ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL) { return NULL; } ListNode *n1, *n2, *n3; n1 = NULL; n2 = pHead; n3 = n2->next; while(n2)

2020-07-23 16:05:17 164

原创 每日一练之链表中倒数第k个节点

链表中倒数第k个节点OJ地址:链表中倒数第k个节点【思路】定义快慢指针让快指针先走k步,慢指针不动再让快慢指针一起向后移动,当快指针走到链表尾时,慢指针就指向倒数第k个节点ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead == nullptr) return nullptr; ListNode *fast, *slow; //定义快慢

2020-07-23 15:48:35 77

原创 每日一练之二进制中1的个数

二进制中1的个数OJ地址:二进制中1的个数int NumberOf1(int n) { int count = 0; while(n) { n &= n - 1; ++count; } return count; }

2020-07-23 15:39:02 125

原创 每日一练之矩阵覆盖(动态规划)

矩阵覆盖OJ地址:矩阵覆盖方法一:迭代int rectCover(int number) { if(number == 0) return 0; int first = 1; int second = 1; int third = 1; for(int i = 2; i<= number; i++) { third = first + second;

2020-07-23 15:01:45 374

原创 每日一练之斐波拉契数列

斐波拉契数列斐波拉契数列相信大家都很熟了吧下面我将介绍三种方法方法一:经典递归int Fibonacci(int n) { if(n <= 2) return 1; return (Fibonacci(n - 1) + Fibonacci(n - 2)) % 1000000007;}方法二:方法一的改进由于方法一中存在很多重复计算的步骤,性能大大降低我定义一个map容器,来存放第1项到第n项的值,如果map中没有第 i 项的值,就将该元素插入到map中

2020-07-23 14:25:50 170

原创 每日一练之青蛙跳台阶(动规问题)

青蛙跳台阶OJ地址:青蛙跳台阶下面我用两种方法解决该问题数组法int numWays(int n) { if(n <= 1) return 1; if(n == 2) return 2; int *dp = new int[n+1]; //此处最后要返回dp[n],所以需要 n+1 个空间 //初始化 dp[0] = 1; dp[1] = 1;

2020-07-23 14:05:18 205

原创 Linux之回收子进程

回收子进程孤儿进程父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为 init 进程,称为 init进程(进程ID为1)领养孤儿进程【验证孤儿进程】#include <stdio.h>#include <unistd.h>int main(){ pid_t pid; pid = fork(); if(pid < 0) { perror("fork error\n"); return -1; } else if(pid > 0

2020-07-23 13:01:12 549

空空如也

空空如也

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

TA关注的人

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