- 博客(114)
- 收藏
- 关注
原创 lock_guard函数
一. 功能解释 lock_guard函数可以用来包装Mutex,做到自动锁定和解锁。 2. linux下源码 template<typename _Mutex> class lock_guard { public: typedef _Mutex mutex_type; explicit lock_guard(mutex_type& __m) : _M_device(__m) { _M_device.lock(); } lock_gu
2022-02-27 19:33:49
745
原创 C++11中的bind函数
#include <functional> bind函数调用形式:auto newCallable = bind(Callable, arg_list); 其中newCallable是一个可调用对象,arg_list是逗号分割的参数列表,对应传给callable的参数。arg_list中的参数有可能含有_n的名字,n是正整数,表示“占位符”,如_1, _2等等。 #include <iostream> using namespace std; void add(int&a
2022-02-25 09:58:27
650
原创 C++11中function函数
包含头文件 #include <functional> //普通函数 int add(int i, int j) { return i+j; } //lambda表达式 auto add = [](int i, int j){ return i+j; } //函数对象类 class add{ //仿函数 int operator() (int i, int j){ return i+j; } } struct add{
2022-02-24 10:36:11
1027
原创 进制转换-负数补码
题目出处:力扣https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/ class Solution { public: string toHex(int num) { if(num == 0){ return "0"; } long _num = num; if(num < 0){ _
2021-10-02 17:36:49
311
原创 两因子差超过x的最小整数-腾讯笔试
题目:对于至少有4个因子的整数n,若其满足任一两个因子之差大于等于x,求最小的整数n 思路:对于整数n,1和n本身为其两个因子,只需找到第一个大于1+x的质数l,和第一个大于l+x的质数r,其乘积r*l即为答案 int T; cin >> T; for (int t = 0; t < T; ++t) { int x; cin >> x; int l = 1 + x; for (; l < INT_MAX
2021-09-27 11:57:51
211
原创 计算器-腾讯笔试
题目描述:实现一个计算器的功能,输入是字符串,只包含整数字符和‘+’,‘x’,‘@’三种字符运算符。'@'优先级最高,'x'次之,‘+’最低。计算表达式的值。 思路:所有表达式均有效,因此符号的个数一定比数字个数少一位。 用两个栈实现,一个栈存放数字,一个栈存放运算符。 遍历字符串,同时以运算符的优先级规律做入栈和出栈操作,若当前运算符的优先级大于运算符栈顶元素的优先级,则将该运算符入栈;反之,则弹出栈中元素进行计算,直到当前运算符优先级大于运算符栈顶元素的优先级,将当前运算符入栈。运算符出栈的过程也
2021-09-27 11:05:05
251
原创 二分查找左右边界
题目出处:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/ 思路:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-xiang-jie-by-labuladong/ class Solution { public: int left_bound(vector<i.
2021-09-04 23:05:25
164
原创 移动语义与std::move函数
移动语义 C++11中引入了移动语义,目的是防止不必要的复制,以提高程序性能。若一个函数要返回临时对象,如果是自己创造的一个临时对象,那首先回调用该临时对象的构造函数,拷贝构造函数和析构函数。 RVO(return Value Optimization)是一种编译器的优化机制,它的目的就是为了消除为保存返回值而创建的临时对象。 std::move 将一个左值对象变换成一个右值对象 ...
2021-09-02 15:28:21
340
原创 阻塞与非阻塞IO、同步与异步IO
目录 IO的过程 阻塞与非阻塞IO 阻塞IO 非阻塞IO 同步与异步IO 同步 异步 IO的过程 数据的准备过程 数据从内核缓冲区拷贝到用户进程缓冲区的过程 阻塞与非阻塞IO 阻塞IO 当用户进程执行read操作的时候,该用户进程会被阻塞。一直等到内核数据准备好,并将数据从内核缓冲区拷贝到用户缓冲区中后,read操作才返回,进程往下执行。 阻塞等待的是内核数据准备完成,并且将数据从内核态拷贝到用户态的这两个过程。 非阻塞IO 当用户进程执行read请求时,非阻塞的read
2021-09-02 15:23:09
200
原创 295. 数据流的中位数
目录 题目 基础知识补充 优先队列 map、set 题目 题目出处:https://leetcode-cn.com/problems/find-median-from-data-stream/ 思路:在数据插入的过程中维护一个大根堆和一个小根堆,并始终保持大根堆的元素个数==小根堆的个数或者大根堆的元素个数==小根堆的个数-1。大根堆中存放的是数据流的较小半段元素;小根堆中存放的是数据流中的较大一半的元素。每次数据插入都针对小根堆。 流程: 若小根堆为空则将该元素直接插入小根堆。
2021-08-27 15:15:57
136
原创 93. 复原 IP 地址
题目出处:https://leetcode-cn.com/problems/restore-ip-addresses/ 思路:回溯+减枝解决。题目中的字符串全为数字构成,需要处理字符串为0开头的情况。 递归函数dfs(duan, startpos, oneAns):代表IP地址的第duan个字符串,duan属于{0,1,2,3};startpos代表第duan+1个字符串的首地址,oneAns代表满足题目条件的一个IP地址划分。 递归终止条件:如果duan==4&&startPo.
2021-08-27 11:31:45
224
原创 881. 救生艇
题目出处:https://leetcode-cn.com/problems/boats-to-save-people/ 思路:要使所需的船数最小,则每艘船上载的人必须尽可能多,即载两人的船数目需要尽可能多。 考虑体重最轻的人 若最轻的人不能与最重的人上同一条船,则最重的人与任何人都不能上同一条船,所以此时最重的人单独一人上一条船。 若最轻的人能与最重的人上同一条船,则要使船的数量少,则必须尽可能利用一艘船的空间,所以此时最轻的人与最重的人上同一条船是最优的选择。 class Solution
2021-08-26 23:28:01
177
原创 K站中转站内最便宜的航班
题目出处:https://leetcode-cn.com/problems/cheapest-flights-within-k-stops/ 方法一:dfs+减枝 思路:用vector<vector<pair<int, int>>> 记录下有向带权图。从起点开始进行深度优先遍历。 最多经过k个中转站,可以转化为最多经过k+1个城市。 使用站点数和每次的花费进行减枝。 class Solution { private: int ans = INT_
2021-08-24 21:10:07
581
原创 滑动窗口的最大值
题目出处:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/ 思路:双指针维护区间大小,用map记录区间每个值出现的次数 class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(nums.size() == 0){ .
2021-08-23 22:25:03
127
原创 队列的最大值
题目出处:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/ 思路1:队列是一个元素先进先出的数据结构 要在O(1)的时间复杂度下找出元素的最大值。可以考虑用map存放队列中的元素,其底层是红黑树,输的根节点存放数据的最大值。因此需要修改map的默认排序。 要在O(1)的时间复杂度下插入和弹出元素,则可以用deque实现。 class MaxQueue { private: deque<int> dq; .
2021-08-23 22:03:28
448
原创 包含min函数的栈
题目出处:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/ 、 思路1:数据栈+最小栈。数据栈正常顺序的数据,最小栈存放当前数据栈中数据的最小值。 数据栈的实现细节 入栈与出栈操作与普通栈一致 最小栈的实现细节 对于入栈操作:如果当前入栈元素小于等于最小栈栈顶元素、或者数据栈为空,则入栈 对于出栈操作:如果当前出栈元素和最小栈的栈顶元素一样,则出栈 class MinStack { private: ...
2021-08-23 21:40:31
252
原创 波峰波谷问题
题目1:排序子序列的个数 题目出处:https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471 思路:找出极值点,满足 input[i] > input[i-1] && input[i] > input[i+1] 或者 input[i] < input[i-1] && input[i] < input[i+1]。当上述循环最后一个极值下标为n-3时,.
2021-08-22 22:28:32
1156
原创 135. 分发糖果
题目出处:https://leetcode-cn.com/problems/candy/ 思路:两次遍历 评分高的孩子比他两侧的相邻孩子获得更多的糖果,等价于同时满足以下两个条件: 条件1:若rating[i]>rating[i+1],则i位的糖果比i+1位的糖果多; 条件2:若rating[i]>rating[i-1],则i位的糖果比i-1位的糖果多。 第一次只考虑满足条件1的时...
2021-08-22 21:31:25
130
原创 C++单例类
1. 构造函数为私有 2. 对象指针是类的静态成员 class people { private: std::string name; int age; static people *instance; public: static people* getInstance() { if (instance == nullptr) { instance = new people("11", 10); ..
2021-08-20 23:53:36
161
原创 组合总和问题
组合总和 题目出处:https://leetcode-cn.com/problems/combination-sum/ 思路:递归+回溯。题目要求数组中的数可以无限次的重复选取,因此遍历每一个可能的递归起始点。在每一个递归起始点下,进行递归,枚举以此元素为起点的所有组合情况。 由于元素可重复,故二次递归时,再次以本次递归的起点元素为起点。i = index 若元素不可重复,则 i = index+1 代码1: class Solution { private: vector<.
2021-08-19 11:33:17
141
原创 526. 优美的排列
题目出处:https://leetcode-cn.com/problems/beautiful-arrangement/ 思路1:深度优先遍历枚举每个可能的结果,统计结果总数 递归函数 void dfs(int pos,int &n,vector<bool>& vis):表示对于第pos位可能填充的数字有多少个,显然它受限与vis数组(在没访问过的数中选取)。 递归终止条件 pos == n+1:说明此时数组第n个位置的数已经分配完毕,说明找到一个可行解。 遍历完所.
2021-08-16 23:49:34
154
原创 绝对差不超过限制的最长连续子数组
题目出处:https://leetcode-cn.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/ 思路:双指针+map。map记录着区间[l,r]中的最大值和最小值。如果量两最值之差超过了limit,则不断删除最左边的元素,直至量最值之差满足要求;否则的话,计算此时区间的长度,并且右移右指针。 补充:map是基于红黑树实现的,默认是按key值升序排列 写法1: cl
2021-08-15 10:36:35
351
原创 统计不开心的朋友
题目出处:https://leetcode-cn.com/problems/count-unhappy-friends/ 思路:由题意可得,如果x不开心,则order[x][u] <order[x][y]且order[u][x] < order[u][v]。(其中order[i][j]表示朋友j在i的朋友列表中的亲密度下标,数值越小表示越亲密) 首先要构造二维数组order。 其次要构造一个数据结构match,记录着每个朋友配对的朋友。 class Solution { publi.
2021-08-14 19:03:33
100
原创 回文子串问题汇总
最长回文子序列 题目出处:https://leetcode-cn.com/problems/longest-palindromic-subsequence/ 思路:动态规划。 定义状态dp[i][j],表示nums[i,...j]中的最长回文子串的长度。显然dp[i][i]=1 如果nums[i]==nums[j],则dp[i][j] = dp[i+1][j-1]+2;如果nums[i] != nums[j],则dp[i][j] = max(dp[i][j-1],dp[i+1][j]) 求dp
2021-08-13 13:53:53
348
原创 超级丑数---优先级队列
题目出处:https://leetcode-cn.com/problems/super-ugly-number/ 思路:用一个最小堆存维护每一轮的最小值,每次从堆中弹出最小的元素,并将其与primes中的每个元素相乘,得出的结果入堆(即每次弹出一个最小值,同时将n个新元素入堆)。为了避免堆中的元素重复,这里用一个哈希集合去重。 class Solution { public: int nthSuperUglyNumber(int n, vector<int>& prim
2021-08-12 19:55:43
120
原创 数组和链表中的环路问题
数组中的环路 题目出处:https://leetcode-cn.com/problems/circular-array-loop/ 思路:类似于链表中找是否存在环路,定义两个指针(一个快指针、一个慢指针),快指针初始时在慢指针的下一个位置。每次慢指针走一步、快指针走两步,两者相遇时则证明存在环。 题干中的限制条件: 环的长度为1:在环的某一处结点判断(快慢指针相遇处为环的结点),如果此时慢指针的下一个位置还是它本身,则说明环的长度为1。 环中的每个元素的方向一致:判断快指针的每一个位置的方向.
2021-08-08 18:38:57
174
原创 拓扑排序基础
拓扑排序 将有向无环图中的定点按照图中的指定顺序进行排序。左上方图中v2和v3没有明确的顺序关系。右上图的各个定点均有明确的顺序关系。 全序:各个顶点之间有明确的先后关系。 偏序:图中有些顶点之间没有明确的先后关系。 拓扑排序流程 选择一个没有前驱的定点v(可以使用优先队列维护)。 从图中删除顶点v和所有以该顶点为起点的边。 重复1和2,直到最后一个顶点被输出。如果有定点不能被输出,则一定存在环。 #include <iostream> #include <vec...
2021-08-08 15:22:17
119
原创 第N个斐波那契数
题目出处:https://leetcode-cn.com/problems/n-th-tribonacci-number/ 1. 递归解法 class Solution { public: int tribonacci(int n) { if(n == 0){ return 0; } if(n == 1){ return 1; } if(n == 2){
2021-08-08 13:36:55
160
原创 802. 找到最终的安全状态
题目出处:https://leetcode-cn.com/problems/find-eventual-safe-states/ 思路:用三种颜色表示每个结点的状态,未访问过(0表示)、已访问过(1表示)、结点是安全的(2表示)。使用bool形式的递归判断一个结点是否为安全的。 递归:1. 搞清f(n)和f(n-1)之间的关系。 2.搞清递归的终止条件。 递归关系:按这题来说,就是如果结点node是安全的,则它所有的邻居都必须是安全的;如果结点node是不安全的,则它其中有一个邻居...
2021-08-06 23:37:41
109
原创 581. 最短无序连续子数组
题目出处:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/ 思路1:将数组分为三部分nums1,nums2,nums3,要找出最短的nums2,将nums2排序后整个数组变为有序。换言之,当对整个数组进行排序后,nums1和nums2将不变。所以对比排序前和排序后的数组,就可得出答案。 class Solution { public: int findUnsortedSubarray(vector
2021-08-03 15:21:26
96
原创 743. 网络延迟时间 (最短距离)
题目出处:https://leetcode-cn.com/problems/network-delay-time/ 思路:用最短距离算法计算出从节点k到途中其他节点的最短距离。找出其中的最大值即可。 dijstra算法:主要的思路是贪心。将所有的节点分为两类,一类是已确定节点,一类是未确定节点。每次从未确定节点中选取一个与起点距离最短的节点,将他归类为已确定节点,并用它来更新从起点到其他所有未确定节点的距离。直到所有的点都被归类为已确定节点。 typedef pair<int, int&g
2021-08-03 11:57:24
400
原创 剑指 Offer 68 - II. 二叉树的最近公共祖先
题目出处:https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/ 思路1:定义递归函数findAns(TreeNode* node, TreeNode* p, TreeNode* q),其意义为若以node为根的二叉树中包含节点p或者节点q,则返回true;若以node为根的二叉树中既不包含p也不包含q,则返回false。 解答1: /** * Definition for a binary
2021-07-31 15:25:00
190
原创 URL和URI的区别
1. URL(Uniform Resource Locator):统一资源定位符 通过URL可以找到服务器上的特定资源 http://192.168.55.1:8080/Demo/LogonServlet 协议: http 服务器IP地址:192.168.55.1 服务软件端口号:8080 2. URI(Uniform Resource Indentifier):统一资源标识符 URI描述的是服务端上服务软件上的某个项目地...
2021-07-31 11:50:30
191
原创 数据库事务
事务的特性 A:原子性,事务是最小的工作单元,不可再分割。 C:一致性,构成事务的一组MDL语句要么全部执行成功,要么全部执行失败 I:隔离性,两个不同的事务之间具有隔离性。多线程情况下会发生。 D:持久性,对数据的修改操作一定会持久化到硬盘文件中,事务才算执行成功。 四种隔离级别 读未提交:一个事务可以读取到另一个事务还没有提交的数据,会导致脏读。 读已提交:一个事务只能读到另一个事务已经提交的数据,没有提交的数据读取不到。缺点是不可以重复读。(oracle默认的隔离级别) 可重复读:...
2021-07-30 18:43:55
129
原创 进制的转换
题目出处:https://leetcode-cn.com/problems/excel-sheet-column-number/ 思路:进制转换,显然这是一个将26进制的数转换成一个十进制的数,按照进制展开并求和即可。 class Solution { public: int titleToNumber(string columnTitle) { int ans = 0; int n = columnTitle.size(); for(i
2021-07-30 15:59:31
130
原创 1104. 二叉树寻路
题目出处:https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/ 思路:利用满二叉树的性质求解。满二叉数的结构是镜像对称结构。每求出一个父节点,均需要通过【同一层对称节点和相同的性质】求出其对称节点,将该对称节点作为新的节点。而同一层的对称节点的和与该层的深度有关,故首先应该求出label所在层的深度。 class Solution { public: int getDepth(int label){ .
2021-07-30 15:11:18
120
原创 剑指 Offer 04. 二维数组中的查找
题目出处:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 分析:对于矩阵中的任意一个元素,若该元素的值大于target,则该元素的右下角矩阵中所有的元素都大与target;若该元素的值小于target,则该元素的左上角矩阵中所有的元素都小于target。 思路:根据以上分析得出的规律,得出两种方法:从右上点出发,若当前元素的值大于target,则列号减一;若当前元素的值小于target,则行号加一。
2021-07-30 14:04:32
93
原创 863. 二叉树中所有距离为 K 的结点---dfs/bfs
题目出处:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree/ 思路:1. 以target为根节点,做深度为k的深度优先遍历。若target不为根节点,则需要知道他的父节点是谁,故在深度优先遍历之前需要用一个哈希表记录每个节点的父节点。因此用根节点做一次深度优先遍历记录每个节点的父节点。 2. 为了保证每次递归均往深处递归,不返回递归,就需要传入先前节点,在保证往深处递归的节点不为先前节点的条件下,进行递...
2021-07-29 15:38:38
143
原创 linux下的七大文件类型
1. 七大文件类型 普通文件 第一个属性为[-],linux中最多的一种文件类型,文本文件,二进制文件等 目录文件 第一个属性为[d] 块设备文件 第一个属性为[b],是存储数据,以提供系统随机存取的借口设备,比如硬盘等 字符设备文件 第一个属性为[c],是一些串行端口的借口设备,如键盘和鼠标等,这些设备是一次性读取和连续输出的 套接字文件 第一个属性为[s],一般用于网络数据连接 管道文件 第一个属性为[p] 链接文件 第一个属性为[l],类似window下的快捷方式 ...
2021-07-29 14:21:55
1045
原创 IP数据包在网络中的传输过程
1. 获取目的IP 2. 判断源IP与目的IP是否在同一网段 --> 比较IP& Genmask 是否相同 2.1 若在同一网段,则先查询arp缓存中是否有目的ip的mac地址,如果arp缓存中有则封装mac包,将ip数据发送给目的主机;如果arp缓存中没有则发送arp请求得到目的主机的mac地址 2.2 若不在同一网段,则将数据包发送给默认路由(或者是网关),通过多个路由(或者是网关)的转发,找到目标子网。重复2.1的操作。 MAC头部 ...
2021-07-29 13:43:57
3857
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅