自定义博客皮肤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)
  • 收藏
  • 关注

原创 98验证二叉搜索树

二叉搜索树不是说要平衡或者一定是满二叉树之类的,重要的是数字的大小是不是比左子树都小,比右子树都大,这样才能写对验证。还能按照搜索二叉树特点,将树中序遍历,检查得到的数组是否为从小到大的。做这道题时想的按照题目意思递归就好了,后来发现还是。错误代码没有考虑到每个节点大小的问题。对二叉搜索树概念了解的不够。

2025-03-30 17:13:27 197

原创 2两数相加解题记录

哎呀,以为这道题也不用写题解的……结果还是有坑没跳出来。还是直接链表相加吧,记得保存进位就好了。最开始想法先计算总和再求出链表。

2025-03-29 22:27:33 215

原创 70爬楼梯解题记录

这个让我想到了斐波那契的计算,也是因为没有保存已经计算过的值而超时了。最初想的是终于知道拆解重复的步骤,从而递归计算了,但是超时了。

2025-03-29 20:58:34 213

原创 区间有关的贪心解题记录435无重叠区间452用最少数量的箭引爆气球

我的想法是开一个数组a,遍历给出的区间,在数组a里将对应落在的区间index标记。如果有重复区间就只选择最小的那个区间标记。但是这道题的区间好像很长-5 * 104 <= starti < endi <= 5 * 104没法用数组a表示总的区间范围。核心思路是当多个区间覆盖同一个点时,保留更短的区间。那么怎么模拟区间覆盖过程呢?我们只好从已经有的区间入手,按照区间的结尾进行排序,每次选择结尾最早的给后面留出更大的空间,且选择和前一个区间不重叠的。

2025-03-29 19:50:11 124

原创 621任务调度器解题记录

好像这个时间花费的关键路径与相同任务的次数有关。**最多次执行的任务可以算出最长的执行间隔,然后用其他任务去填满这些执行间隔。**最好的情况是间隔都能被填满。假如间隔都能被填满且还有剩余的任务,剩余的任务会不会产生新的间隔呢?不会,因为执行最多次的任务可以把他们隔开。哎,最开始是采用模拟的方式解题,想着那就是遍历这些任务嘛,能运行的时候就运行呗,不能就去找下一个。提交的时候发现,不对啊,

2025-03-29 16:37:29 217

原创 763划分字母区间解题记录

题目可以翻译为——在确保当前部分的所有字母都不再出现在后面的前提下,尽早分割。但是怎么确保当前部分的所有字母都不再出现呢?我们可以**记录每个字母最后出现的位置,然后一旦这个字符串包含的字符都在某个范围内结束了,立马分割。**就我现在而言感觉这个思路比较难想到。也可以用哈希表+滑动窗口来做。先记录下每个字母的出现次数,然后对滑动窗口中的每个字母判断次数是否用尽为 0,如果这个窗口内的所有字母次数都为 0,这个窗口就是符合条件的窗口。时间复杂度为 O(n)

2025-03-29 13:50:02 98

原创 94二叉树中序遍历解题记录

从测试结果来看,在力扣的测试环境中,全局变量的生命周期是整个测试用例的执行过程。也就是说,全局变量在整个测试过程中只会初始化一次,而不会在每个测试用例之间重新初始化。闭包Closure是指一个函数(或方法)捕获并持有其外部作用域的变量,即使外部函数已经执行完毕,闭包仍然可以访问和修改这些变量。当然是错的,因为res在整个程序运行过程中都存在且共享的,每次遍历不同的树之前按理说都应该。闭包(其实在这里就是写个内部函数)访问外部变量(内部函数可以修改外部函数的变量)函数嵌套(在函数内部定义另一个函数)

2025-03-28 22:24:09 246

原创 45 55跳跃游戏解题记录

时间复杂度是O(n^n)。对于这个问题,更高效的解法是贪心算法。但是为什么是贪心呢,需要想我们只管跳得更远,比它近的地方一定是可以到达的。于是我需要遍历数组每个值,去维护一个能到达的最大长度。**我才反应过来,我不是要贪总的距离,这次我要贪每一跳尽量远。也就是每一跳都选择那一跳覆盖范围内的跳最远的,就能实现最少次数。说的是一定可以到达,但是求最少跳几次。那不也是贪心贪的每一跳尽量远吗?那我记录一下上次贪心的次数。

2025-03-28 21:44:09 458

原创 121买卖股票的最佳时机解题记录

用贪心来解的话,dp[i]=max(dp[i-1], prices[i]-min_prices): 第i天最大利润是前一天卖出的利润或者今天卖出的利润其中最大的。保证栈顶元素是目前最小的,比栈顶小的就入栈。但是我想知道单调栈是怎么做的。虽然不清楚卖出是什么时候,

2025-03-28 19:11:40 186

原创 并查集解题记录128最长连续序列200岛屿数量547省份数量684冗余连接

对这道题的思路是先将数据都放入map,然后遍历数组查找每个元素是否有v+1和v-1的元素存在,如果存在就合并这个集合。维护一个size数组,记录每个集合的大小,在union时更新。可以将深度小的树合并到深度大的树上,或者将节点数少的树合并到节点数多的树上,这样做的目的是让树保持尽可能平衡,避免形成深度很大的树,确保操作的效率。依次扫描所有的边,把边的两端点都合并 union() 到一起。如果遇到一条边的两端点已经在一个集合里面了,就说明是多余边,删除。如果下次再 Find(4),仍然要 4 步,效率很低!

2025-03-28 16:20:55 374

原创 15三数之和解题记录

代码中还有一个关键的:left 从 i+1 开始而不是 0,避免重复解。假设 nums = [-1, 0, 1, 2, -1, -4],排序后是 [-4, -1, -1, 0, 1, 2]。当 i=1(nums[i] = -1),如果 left 可以从 0 开始,会重新计算 nums[0] = -4 的组合,但 nums[0] 已经在 i=0 时处理过,这样会导致重复解。先排序,然后双重遍历,外重遍历整个数组,内重遍历双指针寻找能组合为0的另外两个数。但是由于避免输出的重复,外重遍历时需要跳过相同的数字。

2025-03-27 22:11:12 206

原创 11盛最多水的容器解题记录

看起来像是要遍历每种容器再来作比较,但是只用知道最大的那个容器,在遍历的时候可以有策略性。容积=宽*高,放弃宽可能得到更多高,于是宽从大到小遍历,然后比较每种情况的高。初步想法是左右两个指针,然后有选择性的收缩,收缩更短的那边,这样贪心的方式会不会错过最优解呢?这道题的贪心不会错过最优解。

2025-03-27 21:42:45 105

原创 128最长连续序列解题记录

但是写着写着发现存入map之后呢,怎么去遍历呢?连续序列的起点是:当前数 - 1”不在集合中,又是一轮遍历。题目提示的hash解法要结合题意来看——不断地检查“当前数 + 1”是否存在于数组中,来扩展这个序列。并查集的解法放到另一个并查集总结的文章中,等我写了那个文章就来放链接。直接的方法是将数组排序,然后遍历记录连续的长度。这份代码竟然超时了,于是乎,优化一下看看能通过。最开始没读清楚题目觉得好难啊。

2025-03-27 21:17:44 542

原创 49字母异位词分组解题记录

我在想提示词有哈希,可是异位词的hash key也没有共同点啊。但是可以转化后找到共同点,①排序之后的那个字符串作为key ②key是一个26位数组,在Go语言中虽然数组(非切片)是值类型,但固定长度的数组可以作为键。那么value又怎么组织呢?我们把value设置为一个字符串切片就好了。难点应该在这里的map使用相比于常见的情况要稍微多做一步转换。

2025-03-27 19:44:07 186

原创 21合并两个有序链表

思路没啥好说的,但是吧语法上有点问题。开始想的是创建struct存入值,其实处理链表又不保留原链表不用这么麻烦。

2025-03-27 16:33:55 202

原创 141 142环形链表解题记录

但是这道链表的题目还能用快慢指针法!如果链表有环,快慢指针最终会相遇;如果无环,快指针会先到达nil。快指针(fast)每次走两步,慢指针(slow)每次走一步。终于学会用map解决这种是否有重复的题目了。

2025-03-27 15:51:20 241

原创 234回文链表解题记录

慢指针每次走1步,快指针每次走2步。快指针到末尾时,慢指针在中点(奇数为正中,偶数为前半部分末尾)。但是顺序比较是不行的,可以将后半部分链表翻转,然后再比较。首先想到的是遍历一次,知道链表长度,然后第二次遍历将前半部分入栈与后面的比较。这个思路依赖回文链表对称的特点,看了一下相关标签有双指针的解法。

2025-03-27 15:19:44 128

原创 206反转链表解题记录

然后可以稍微优化一下减少一个判断,就是前驱节点其实最初可以设置为nil。主要是需要三个指针参与,然后一些细节。

2025-03-27 14:13:29 100

原创 160相交链表解题记录

一个方法是每次遍历到倒数的节点,(第一次倒数第一个,第二次倒数第二个……或者换个数据结构,遍历一次换成双向链表,找到位置后去原本的链表中遍历。这种找元素的问题,用map也行,因为地址和值都得是一样的。双指针的方法也是常见和常考的方法,既不需要额外空间,时间复杂度也最优。设链表A的非公共部分长度为a,链表B的非公共部分长度为b,公共部分长度为c。总路径长度均为a + b + c,因此必然在相交点或nil处相遇。pA的路径:a → c → b(重置后)。pB的路径:b → c → a(重置后)。

2025-03-27 11:18:29 171

原创 283.移动零解题记录

但是这份代码存在问题。我想少几个覆盖次数,j<i带来了缺陷,j=i时就不会赋值非零的数据了,丢失了这些数据!而且 j 只有在赋值后才递增,j 始终 ≤ i。最开始的想法是覆盖+补0。

2025-03-26 20:43:46 209

原创 1两数之和解题记录

开始打算用一个数组保存差值,arr[target-nums[i]] = i, 只要arr[nums[i]]有内容就能满足target,返回arr[nums[i]]和i。但是会出现复数的情况,所以换成map。换成map就只用一边遍历,一遍检查和存入对应key就行了,value就是index,不用拐着弯儿存。

2025-03-26 20:23:10 215

原创 56合并区间 go解题

这里解法是直接找一个快排模板,然后排序了第一个数,所以需要多加一个判断逻辑并且稍微覆盖。

2024-11-03 16:03:51 409

原创 perf record信息解析

具体的perf采样数据,包括进程号、CPU编号、时间戳、事件类型等信息。55de7b58ffbe evlist_cpu_iterator__next+0x2e (/usr/bin/perf): 函数调用栈信息。N/A|SNP N/A|TLB N/A|LCK N/A|BLK N/A: 一些附加信息。cpu/mem-stores/P: 事件类型。2296.116848: 时间戳。5080021: 事件计数。[000]: CPU编号。0: 上下文切换错误计数。0: 上下文切换计数。

2024-09-28 19:40:01 532

原创 Linux vscode push报错fatal: Authentication failed

注意啊,Git基于密码的身份验证已经被删除了,所以这个报错发生时无论密码正确与否,以及参考比较旧的改bug教程,都没法提交。进入提示的网址,生成个人访问令牌就好了。

2024-05-10 21:26:55 339

原创 任何内核都无法启动解决方案

实验中不停编译新的内核又懒得删除了,于是乎在编译到第9+7=16个内核后,无法启动了。

2024-05-04 11:52:52 750

原创 物理页采样内核配置damon和perf

获取 DAMON 合并的 Linux 内核源代码树(自 v5.15 起它已合并到 Linux 主线树中),构建并安装它。https://github.com/torvalds/linux/releases/tag/v6.1-rc1(这个是预备版本,不行会报错)要选用确定的版本。然后确保系统perf是OK的,damon需要用,但是一些内核是改过名字的就很难从apt install下载,所以直接源码下载安装更省事。不确定的点是否根据NUMA node有无CPU绑定来区别分层内存的层级的。

2024-04-18 16:58:52 541

原创 Go语言中cap函数是干什么的?和len有什么关系?

len 返回切片或数组的实际元素个数,而 cap 返回切片的容量或数组的长度(数组没有容量的概念)。

2024-02-02 11:13:50 1163

原创 Go语言中...(三个点)的使用几个常见情况

①可变参数函数(Variadic Functions): 在函数定义中,“…” 可以用于表示可变参数。③在数组的定义中,如果使用 “…” 表示长度,Go 语言会根据初始化值的个数自动计算数组的长度。②如果一个切片后面跟着 “…这里传递的不是切片是多个整数!

2024-02-02 11:03:26 909

原创 代码 测试用例 测试结果 测试结果 80. 删除有序数组中的重复项 II

是去寻找接下来还有那些满足,满足的就接着放。指针指向已经满足题目要求的数组的末尾,而。由于是递增的数组我们可以将两个条件(这题满足的条件有两种①。

2024-01-10 19:14:20 483 2

原创 2707.字符串中的额外字符

首先是用C语言写,因为平时我开发需要熟悉C。其次会详细解释一下这道题算法的知识点,但是是动态规划。这道题还有另一种更低时间复杂度的,这里不讲。C的哈希表在#include “uthash.h”,但是OJ要自己写。

2024-01-09 20:56:30 397

原创 412. Fizz Buzz C语言实现

数组就能放一个字符串,放字符串的话一定要记得多一个地方放。表示,并且开辟对应的地址空间。这就是下面代码做的事。这个字符,要不然输出是乱码。字符、字符串、指针。表示,字符串数组就用。

2024-01-08 13:37:04 524

原创 安装bpftrace和bcc的踩坑记录

最后在Ubuntu22.04使用Ubuntu提供的安装命令完成了安装。这里是记录尝试在Ubuntu18.04和Ubuntu22.04使用源码安装未果的过程。

2023-09-02 19:15:24 4134 4

原创 取消文件夹的sudo限制

从某些需要sudo的地方复制一份,或者某些操作需要sudo,那么这个文件夹也带了权限,修改啥的就很麻烦。ACL 允许你更细粒度地控制文件和文件夹的访问权限。命令来添加ACL规则。

2023-08-14 21:52:01 633

原创 sudo免密码设置以及设置失败解决方法

如果保存后出现类似于“你确定吗”之类的选项,请返回查看哪里是不是写错了。退出会出现一行“文件写入file to insert:\etc\sudoers.tmp”之类的提示,一般默认就好了。就是目前你这个账户的名字,开机时会输密码登录的那个用户名,每一句命令行提示符那个名字。,然后按下 Enter 来保存更改。修改\etc\sudoers文件。打开后有很多已有的设置大致格式。在 nano 编辑器中,按下。

2023-08-14 21:29:33 967

原创 Ubuntu开机显示频率超范围解决方式

按下e键进入编辑模式,然后找到一行以"linux"开头的代码。在这一行的末尾添加"nomodeset",然后按下Ctrl+X或者F10启动系统。这可能会强制使用一个较低的分辨率,让你能够进入系统并更改图形设置。如果你是自己改设置改坏了的话。选择"Advanced options for Ubuntu",然后选择一个带有"recovery mode"标签的选项。这里给出安全重启的方法:同时按住Ctrl+Alt不要放,再依次按下:SysRq(有的是PrtSc)、R、E、I、S、U、B键,之后系统会安全重启。

2023-08-14 21:26:03 1403

原创 LLVM笔记2 Intermediate Representation (IR)

参考链接:https://llvm.org/devmtg/2019-04/slides/Tutorial-Bridgers-LLVM_IR_tutorial.pdf。

2023-08-08 15:54:27 563

原创 CMake 3.13.4 or higher is required. You are running version 3.10.2

参考视频 https://www.youtube.com/watch?

2023-08-07 21:27:16 736

原创 LLVM笔记1

参考:https://www.bilibili.com/video/BV1D84y1y73v/?

2023-08-04 16:55:09 1043

原创 查看内存使用情况top和free命令的使用

如果有四个进程显示为11%,那么它们各自占用的内存比例是11%,但不能简单地将它们相加得到总内存占用百分比。这是因为每个进程使用的内存之间可能存在重叠,以及系统的其他进程和缓存也在使用内存。在这个示例中,系统的总内存为7.7GB,已使用的内存为3.2GB,空闲的内存为1.5GB。同时,有500MB的内存用于共享,3.0GB的内存用于缓存,还有3.8GB的内存可用。要计算所有进程占用内存的总和,需要考虑整个系统的内存使用情况,而不仅仅是top命令中列出的那些进程。命令可以查看系统的内存使用情况。

2023-07-10 18:58:41 1012

原创 linux内核突然崩溃应该怎么检查错误

在对内核做修改时,可能存在直接无法开机或者运行某个应用崩溃的情况,记录一些检查错误的办法。

2023-07-09 10:03:20 2679

动态分层混合存储系统内核

MULTI-CLOCK: Dynamic Tiering for Hybrid Memory Systems(动态分层混合存储系统)的主要需要被编译的内核文件

2022-12-15

动态分层混合存储系统的脚本文件

MULTI-CLOCK: Dynamic Tiering for Hybrid Memory Systems(动态分层混合存储系统)

2022-12-15

空空如也

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

TA关注的人

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