自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 575

原创 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 535

原创 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 885

原创 进制转换-负数补码

题目出处:力扣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 143

原创 两因子差超过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 116

原创 计算器-腾讯笔试

题目描述:实现一个计算器的功能,输入是字符串,只包含整数字符和‘+’,‘x’,‘@’三种字符运算符。'@'优先级最高,'x'次之,‘+’最低。计算表达式的值。思路:所有表达式均有效,因此符号的个数一定比数字个数少一位。用两个栈实现,一个栈存放数字,一个栈存放运算符。 遍历字符串,同时以运算符的优先级规律做入栈和出栈操作,若当前运算符的优先级大于运算符栈顶元素的优先级,则将该运算符入栈;反之,则弹出栈中元素进行计算,直到当前运算符优先级大于运算符栈顶元素的优先级,将当前运算符入栈。运算符出栈的过程也

2021-09-27 11:05:05 140

原创 二分查找左右边界

题目出处: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 95

原创 移动语义与std::move函数

移动语义 C++11中引入了移动语义,目的是防止不必要的复制,以提高程序性能。若一个函数要返回临时对象,如果是自己创造的一个临时对象,那首先回调用该临时对象的构造函数,拷贝构造函数和析构函数。 RVO(return Value Optimization)是一种编译器的优化机制,它的目的就是为了消除为保存返回值而创建的临时对象。std::move 将一个左值对象变换成一个右值对象...

2021-09-02 15:28:21 196

原创 阻塞与非阻塞IO、同步与异步IO

目录IO的过程阻塞与非阻塞IO阻塞IO非阻塞IO同步与异步IO同步异步IO的过程数据的准备过程 数据从内核缓冲区拷贝到用户进程缓冲区的过程阻塞与非阻塞IO阻塞IO当用户进程执行read操作的时候,该用户进程会被阻塞。一直等到内核数据准备好,并将数据从内核缓冲区拷贝到用户缓冲区中后,read操作才返回,进程往下执行。阻塞等待的是内核数据准备完成,并且将数据从内核态拷贝到用户态的这两个过程。非阻塞IO当用户进程执行read请求时,非阻塞的read

2021-09-02 15:23:09 106

原创 295. 数据流的中位数

目录题目基础知识补充优先队列map、set题目题目出处:https://leetcode-cn.com/problems/find-median-from-data-stream/思路:在数据插入的过程中维护一个大根堆和一个小根堆,并始终保持大根堆的元素个数==小根堆的个数或者大根堆的元素个数==小根堆的个数-1。大根堆中存放的是数据流的较小半段元素;小根堆中存放的是数据流中的较大一半的元素。每次数据插入都针对小根堆。流程:若小根堆为空则将该元素直接插入小根堆。

2021-08-27 15:15:57 57

原创 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 102

原创 881. 救生艇

题目出处:https://leetcode-cn.com/problems/boats-to-save-people/思路:要使所需的船数最小,则每艘船上载的人必须尽可能多,即载两人的船数目需要尽可能多。考虑体重最轻的人若最轻的人不能与最重的人上同一条船,则最重的人与任何人都不能上同一条船,所以此时最重的人单独一人上一条船。若最轻的人能与最重的人上同一条船,则要使船的数量少,则必须尽可能利用一艘船的空间,所以此时最轻的人与最重的人上同一条船是最优的选择。class Solution

2021-08-26 23:28:01 77

原创 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 264

原创 滑动窗口的最大值

题目出处: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 56

原创 队列的最大值

题目出处: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 309

原创 包含min函数的栈

题目出处:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/、思路1:数据栈+最小栈。数据栈正常顺序的数据,最小栈存放当前数据栈中数据的最小值。数据栈的实现细节 入栈与出栈操作与普通栈一致最小栈的实现细节对于入栈操作:如果当前入栈元素小于等于最小栈栈顶元素、或者数据栈为空,则入栈 对于出栈操作:如果当前出栈元素和最小栈的栈顶元素一样,则出栈class MinStack {private:...

2021-08-23 21:40:31 60

原创 波峰波谷问题

题目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 850

原创 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 56

原创 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 74

原创 组合总和问题

组合总和题目出处:https://leetcode-cn.com/problems/combination-sum/思路:递归+回溯。题目要求数组中的数可以无限次的重复选取,因此遍历每一个可能的递归起始点。在每一个递归起始点下,进行递归,枚举以此元素为起点的所有组合情况。由于元素可重复,故二次递归时,再次以本次递归的起点元素为起点。i = index 若元素不可重复,则 i = index+1代码1:class Solution {private: vector<.

2021-08-19 11:33:17 64

原创 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 66

原创 绝对差不超过限制的最长连续子数组

题目出处: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 164

原创 统计不开心的朋友

题目出处: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 42

原创 回文子串问题汇总

最长回文子序列题目出处: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 166

原创 超级丑数---优先级队列

题目出处: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 45

原创 数组和链表中的环路问题

数组中的环路题目出处:https://leetcode-cn.com/problems/circular-array-loop/思路:类似于链表中找是否存在环路,定义两个指针(一个快指针、一个慢指针),快指针初始时在慢指针的下一个位置。每次慢指针走一步、快指针走两步,两者相遇时则证明存在环。题干中的限制条件:环的长度为1:在环的某一处结点判断(快慢指针相遇处为环的结点),如果此时慢指针的下一个位置还是它本身,则说明环的长度为1。 环中的每个元素的方向一致:判断快指针的每一个位置的方向.

2021-08-08 18:38:57 98

原创 拓扑排序基础

拓扑排序将有向无环图中的定点按照图中的指定顺序进行排序。左上方图中v2和v3没有明确的顺序关系。右上图的各个定点均有明确的顺序关系。全序:各个顶点之间有明确的先后关系。 偏序:图中有些顶点之间没有明确的先后关系。拓扑排序流程选择一个没有前驱的定点v(可以使用优先队列维护)。 从图中删除顶点v和所有以该顶点为起点的边。 重复1和2,直到最后一个顶点被输出。如果有定点不能被输出,则一定存在环。#include <iostream>#include <vec...

2021-08-08 15:22:17 40

原创 第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 70

原创 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 39

原创 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 39

原创 743. 网络延迟时间 (最短距离)

题目出处:https://leetcode-cn.com/problems/network-delay-time/思路:用最短距离算法计算出从节点k到途中其他节点的最短距离。找出其中的最大值即可。dijstra算法:主要的思路是贪心。将所有的节点分为两类,一类是已确定节点,一类是未确定节点。每次从未确定节点中选取一个与起点距离最短的节点,将他归类为已确定节点,并用它来更新从起点到其他所有未确定节点的距离。直到所有的点都被归类为已确定节点。typedef pair<int, int&g

2021-08-03 11:57:24 215

原创 剑指 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 68

原创 URL和URI的区别

1. URL(Uniform Resource Locator):统一资源定位符通过URL可以找到服务器上的特定资源http://192.168.55.1:8080/Demo/LogonServlet 协议: http 服务器IP地址:192.168.55.1 服务软件端口号:80802. URI(Uniform Resource Indentifier):统一资源标识符URI描述的是服务端上服务软件上的某个项目地...

2021-07-31 11:50:30 75

原创 数据库事务

事务的特性A:原子性,事务是最小的工作单元,不可再分割。 C:一致性,构成事务的一组MDL语句要么全部执行成功,要么全部执行失败 I:隔离性,两个不同的事务之间具有隔离性。多线程情况下会发生。 D:持久性,对数据的修改操作一定会持久化到硬盘文件中,事务才算执行成功。四种隔离级别读未提交:一个事务可以读取到另一个事务还没有提交的数据,会导致脏读。 读已提交:一个事务只能读到另一个事务已经提交的数据,没有提交的数据读取不到。缺点是不可以重复读。(oracle默认的隔离级别) 可重复读:...

2021-07-30 18:43:55 50

原创 进制的转换

题目出处: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 43

原创 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 42

原创 剑指 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 28

原创 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 70

原创 linux下的七大文件类型

1. 七大文件类型普通文件第一个属性为[-],linux中最多的一种文件类型,文本文件,二进制文件等目录文件第一个属性为[d]块设备文件第一个属性为[b],是存储数据,以提供系统随机存取的借口设备,比如硬盘等字符设备文件第一个属性为[c],是一些串行端口的借口设备,如键盘和鼠标等,这些设备是一次性读取和连续输出的套接字文件第一个属性为[s],一般用于网络数据连接管道文件第一个属性为[p]链接文件第一个属性为[l],类似window下的快捷方式...

2021-07-29 14:21:55 783

原创 IP数据包在网络中的传输过程

1. 获取目的IP2. 判断源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 3352

空空如也

空空如也

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

TA关注的人

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