- 博客(40)
- 收藏
- 关注
原创 golang知识点细节
fmt包使用格式化控制符来指定输出的格式,例如:%d:输出整数。%f:输出浮点数。%s:输出字符串。%v:输出值的默认格式。%T:输出值的类型。%p:输出变量的内存地址。
2024-09-18 16:52:22
408
原创 perf简要说明
https://github.com/brendangregg/perf-tools/blob/master/README.mdhttps://perf.wiki.kernel.org/index.php/Tutorial
2023-12-11 16:07:44
397
原创 二叉树中最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次。该路径 至少包含一个节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和。
2023-05-05 16:01:37
103
原创 仅包含 0 和 1, 最大矩阵
1、给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
2023-04-25 18:49:08
192
原创 基于libevent 的定时器
#include "event.h"#include <sys/time.h>class EventWatcher {public: typedef std::function<void()> Handler; EventWatcher(struct event_base *event_base, const Handler& handler); virtual ~EventWatcher(); bool Init(); boo
2021-10-20 16:32:32
203
原创 C++ 内存模型
关于C++内存模型2004年,Java 5.0引入了适用于多线程环境的内存模型[2]:JSR-133[3]。但C++直到2011标准才引入了内存模型。Java内存模型在很大程度上影响了C++内存模型,但后者走得更远。因为它允许开发者打破顺序一致性(Sequential Consistency,我们会在下文中讲解),以获得更好的控制。之所以这么做是因为C++是一门系统编程语言,它的设计意图之一就是:不需要另外一个更底层的语言,而是直接提供给开发者以”接近机器“的方式编程。即便大多数程序员不用在意
2021-09-21 18:45:38
1696
原创 八大基础排序 C/C++
八大基础排序 C/C++一、冒泡排序时间复杂度:空间复杂度:二、选择排序时间复杂度:空间复杂度:三、插入排序时间复杂度:空间复杂度:四、快速排序时间复杂度:空间复杂度:五、归并排序时间复杂度:空间复杂度:六、希尔排序时间复杂度:空间复杂度:七、堆排序时间复杂度:空间复杂度:八、桶排序(基数排序)时间复杂度:空间复杂度:总结提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷
2021-08-23 10:13:58
110
原创 打印数组元素所有的排序组合 C/C++
不考虑数组元素相同的情况~!2、定义一个数组,编程打印它的全排列。比如定义:#define N 3 int a[N] = { 1, 2, 3 };则运行结果是:$ ./a.out1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2 #include <stdio.h> #define N 3 int a[N]; void perm(int); /*求数组的全排列 */ void pri
2021-07-28 19:39:12
524
原创 打家劫舍 leetcode
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。用 dp[i]\textit{dp}[i]d
2021-07-19 15:21:52
70
原创 约瑟夫环问题
问题描述:0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。...
2021-07-19 14:43:04
238
原创 互斥元与条件变量
互斥元:C++提供了std::mutex;调用lock()来锁定;调用unlock()解锁。作为替代,提供了身体都std::lock_guard类模板,实现互斥元的RAII管用语法,在构造时锁定互斥元,在析构时将互斥元解锁。std::unique_lock比std::lock_guard提供了更多的灵活性。数据竞争:C++标准库提供了std::once_flag 和std::call_once来处理这种情况~!std::shared_ptr <some_resour...
2021-07-19 11:33:08
96
原创 手写hash数据结构
用C语言手写hash数据结构和接口; 提供添加、删除、查询等功能。/* 采用链表方式解决冲突问题。*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxSize 65535//hash 节点typedef struct dnode{ char *key; char *value; struct dnode * next;} DNode;//hash表
2021-07-15 20:37:23
146
原创 线程局部存储(TLS)
线程局部存储(STL,thread local storage): 拥有线程生命期及线程可见性的变量。线程局部存储实际上是由单线程程序中的全局/静态变量被应用到多线程程序中被线程共享而来。C++11 对TLS标准,声明一个TLS变量的语法通过thread_local 修饰符声明即可:int thread_local arg;一旦声明一个变量为thread_local, 其值将在线程开始时被初始化,而在线程结束时,该值也将不再有效。...
2021-07-05 17:32:09
154
原创 POD 类型
#POD 类型POD: Plain Old Datade 缩写。C++11将POD划分为两个基本概念,即:平凡的 和标准布局的。一个平凡的类或者结构体应该符合:1、拥有平凡的默认构造函数和析构函数。2、拥有平凡的拷贝构造函数和移动构造函数。3、拥有平凡的拷贝赋值运算符和移动复制运算符。4、不能包含与函数以及虚基类。标准布局的类或结构体应该符合:1、所有非静态成员有相同的访问权限。2、在类或者结构体继承时,满足一下两种情况之一:a、派生类中有非静态成员,且只有一个包含静态成员的基类。b、基
2021-07-05 17:03:31
203
原创 TCMalloc
TCMalloc 是Google开发的内存分配器。全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free,new,new[]等)。TCMalloc 可以分为三部分: 前端(front-end)、中端(middle-end)、后端(back-end)。* 前端是一个缓存,为应用程序快速提供内存分配和内存解除。* 中端负责为前端补充缓存。* 后端从系统OS中获取内存。注释:前端能运行在pe
2021-06-18 14:14:03
1467
原创 智能指针以及代码实现
C++ 11 标准中改用unique_ptr、shared_ptr、weak_ptr等智能指针来自动回收堆分配的对象。unique_ptr与所指对象的内存绑定紧密,不能与其他unique_ptr类型的指针对象共享所指对象的内存。unique_ptr则是一个删除了拷贝构造函数、保留了移动构造函数的指针分装类型。shared_ptr允许多个该智能指针共享同一堆分配对象的内存。weak_ptr可以指向shared_ptr指针指向的对象内存,却并不拥有该内存。普通智能指针:template &
2021-06-16 16:58:25
230
原创 LRU
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。#include <unordered_map>#inlcude <list>#include <algorithm>#include <iostream>
2021-06-10 14:39:53
82
原创 内存模型和原子类型操作
1、内存顺序a、memory_order_relaxed;b、memory_order_consume;c、memory_order_acquire;d、memory_order_release;e、memory_order_acq_rel;f、memory_order_seq_cst;这是原子类型上所有操作的内存顺序选项,是最严格的可用选项;顺序一致。Acquire and Release语意:Acquire semantics: is a property that c
2021-06-10 09:59:40
171
原创 linux 优化
性能的本质:系统分析的工具:问题分析的方法:可以分为CPU, 内存/磁盘,网络,IO性能,应用程序四个区块。CPU性能分析:命令: top; uptime平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:平均负载高有可能是 CPU 密集型进程导致的;平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;当发现负载高的时候,你可以使用 mps.
2021-06-04 17:43:19
161
原创 最长公共子序列(LCS)
最长公共子序列(longest common sequence)推理公式:代码:int **Lcs_length(string X,string Y,int **B){ int x_len = X.length(); int y_len = Y.length(); int **C = new int *[x_len+1]; for (int i = 0; i <= x_len; i++) { C[i] = new int[y_len + 1]; .
2021-06-03 20:00:35
242
原创 二叉树中两个子节点的最低公共父节点
class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root == NULL) return NULL; if(root == p || root == q) return root; TreeNode* left =...
2021-06-03 19:37:59
116
原创 Floyd算法
弗洛伊德最短距离算法(Floyd Shortest Path Algorithm)又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。Floyd算法基于一个事实:如果存在顶点k,使得以k作为中介点时,顶点i和顶点j的当前最短距离缩短,则使用顶点k作为顶点i和顶点j的中介点,即dis[i][k] +dis[k][j] < dis[i][j] 时,令dis[i][j] =
2021-06-03 11:13:52
134
原创 Dijkstra 算法
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。#include <iostream>#include <string>#include <sstream>#include <cstring>
2021-06-02 18:16:42
232
原创 求解最长回文字符串
Manacher算法核心Manacher算法的核心部分在于它巧妙的令人惊叹的加速,这个加速一下把时间复杂度提升到了线性,让我们从暴力的算法中解脱出来,我们先引入概念,再说流程,最后提供实现代码。概念:ManacherString:经过Manacher预处理的字符串,以下的概念都是基于ManasherString产生的。回文半径和回文直径:因为处理后回文字符串的长度一定是奇数,所以回文半径是包括回文中心在内的回文子串的一半的长度,回文直径则是回文半径的2倍减1。比如对于字符串 "aba",在字
2021-05-28 15:44:40
368
原创 Valid Parenthese
题目:Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]" are all valid but "(]" and "([)]" are not.Code:class Solution {
2021-05-14 16:32:50
117
原创 KMP算法
link: https://www.cnblogs.com/zhangtianq/p/5839909.html本文对kmp算法不做冗余的说明。Next数组规则总结:Next[n]; n = pattern_str.size()(1) 初始Next[0] 为-1;(2) 对于第n个字符Next(n), 假设第Next(n-1)=k;(3) 当k=-1时,则Next(n)=0;(4) 当k!= -1时;将第n-1个字符与第k字符比较;(5) 当pattern_str[n-1]
2021-05-12 20:35:33
66
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人