- 博客(50)
- 收藏
- 关注
原创 对比不同json从结构体转换时间对比,存储,及读取转换
结果为存储和读取josn文件为准,转换时间(结构体转json时间),写入时间(转换时间+写入文件时间),读取时间(从文件读出到转换为结构体对象的时间和)所有时间都为毫秒。结果为存储和读取josn文件为准,转换时间(结构体转json时间),写入时间(转换时间+写入文件时间),读取时间(从文件读出到转换为结构体对象的时间和)所有时间都为毫秒。结果为存储和读取josn文件为准,转换时间(结构体转json时间),写入时间(转换时间+写入文件时间),读取时间(从文件读出到转换为结构体对象的时间和)所有时间都为毫秒。
2025-11-19 14:53:58
353
原创 leedcode 算法刷题第三十五天
/ 情况2:第i-1天持有股票,今天以prices[i]的价格卖出 -> dp[i-1][0] + prices[i]// 第0天结束后持有股票:只能在第0天买入,利润为 -prices[0](成本)最后一天结束后,肯定是不持有股票的状态(状态1)才能获得最大利润(因为如果还持有股票没卖,相当于亏损了买入的成本)。// 情况1:第i-1天就持有着股票,今天啥也不干 -> dp[i-1][0]// 情况1:第i-1天就不持有股票,今天啥也不干 -> dp[i-1][1]// 状态0:第i天结束后持有股票。
2025-09-16 15:00:38
711
原创 leedcode 算法刷题第三十四天
0, n-2](从第一间到倒数第二间)这样确保第一间和最后一间不会同时被偷[1, n-1](从第二间到最后一间)这样也确保第一间和最后一间不会同时被偷textdp[0] = 2结果:4textdp[0] = 0 (不偷第一间)dp[1] = 3结果:7最终结果。
2025-09-14 10:25:13
294
原创 leedcode 算法刷题第三十二天
cppdp[i][j]:考虑前i种物品,背包容量为j时的最大价值注意:这里"种"很重要,因为每种物品可以选多次cppdp[j]:凑成金额j的硬币组合数使用uint防止大数相加溢出(很好的考虑!
2025-09-11 20:35:42
1667
原创 leedcode 算法刷题第二八天
思路:都为1,首先设置dp2为数组,让第一行和第一列,因为只有一种方法可以走到,然后确定递推公式,因为只能向右或者向下走所以公式为他的上一个点的到达条数加上左面点到达条数相加result[i][j] = result[i-1][j]+result[i][j-1];思路:这个题跟上个题差不多,有障碍就是1没障碍就是0,有障碍dp数组不更新还是0,无障碍才更新。
2025-09-08 20:28:28
254
原创 c++八股文1
编译期是指源代码被编译器处理转换成机器码的阶段。这个阶段发生在程序运行之前。运行期是指编译后的可执行程序实际在操作系统上运行的阶段。特性编译期(Compile Time)运行期(Run Time)时间程序运行前程序运行中执行者编译器CPU工作内容语法检查、类型检查、优化实际计算、I/O操作错误类型编译错误运行时错误输入来源源代码用户输入、文件等确定性确定性的可能不确定简单记忆:编译期:编译器处理代码的阶段("纸上谈兵")运行期:程序实际执行的阶段("真枪实弹")
2025-09-06 18:02:01
838
原创 leedcode 算法刷题第二八天
思考一下,现在到达的楼梯树花费的钱数是不是上一个楼梯花费的钱数加上走那个楼梯的钱数,两种可能可能是--1,或者-2;确定数组,题目说了可以从0或1开始走,所以到达0或1不花钱就都是0,此题可解。代码和上面差不多,这个题我觉得做法就是你先列出1,2,3,4,层楼梯有多少种然后找出规律确定地推公式,选择数组,确定开始位置,确定好边界值,就做完了。
2025-09-06 10:23:41
271
原创 leedcode 算法刷题第二六天
先根据左边界排列顺序,然后不断判断元素左边界是否小于上一个元素左边界,如果不符合result++、如果符合更新有边界最小值,才能保证都重合。
2025-09-04 11:45:50
163
原创 leedcode 算法刷题第二五天
思路:每次遍历剩余的油量,如果小于0说明这个点不行,更新为后面节点,最后计算总值,如果小于0就说明不存在一个节点,如果大于0返回记录的节点。就是按循序,别忘掉东西。
2025-09-03 11:25:39
199
原创 leedcode 算法刷题第二四天
思路:每次记录该节点能够到达的最远距离并且比较该节点和最远距离之间的大小如果最远距离都到不了该节点说明失败了,如果最远距离大于最后一个几点说明可以到达。思路:更上面题有点像,每次记录当前节点能到达的最远距离,并一直维护,当达到上一个跳跃节点的最远距离时,更新一样能跳多远,并且每次进入更新jump。
2025-09-02 17:42:24
269
原创 线程池项目代码细节5
接口统一化:将多样化的函数签名统一为void()接口参数预处理:提前绑定参数,执行时无需再传递延迟执行:分离参数绑定与实际执行时机类型擦除:隐藏具体的函数类型细节资源管理:确保参数在执行时的有效性正是通过std::bind的这种"标准化包装"能力,我才能够实现一个既灵活又统一的任务提交接口,让线程池能够处理任意类型的任务函数。void()提供了统一的任务接口,简化了队列管理实现了类型擦除,可以容纳各种可调用对象分离了参数绑定与执行,关注点分离提高了代码可读性,语义清晰明确支持灵活的扩展,易于维护和修改。
2025-09-02 09:48:16
659
原创 线程池项目代码细节4
为什么会发生死锁呢,首先我们来分析3种情况当pool发生析构时将运行状态置为false,然后去通知所有的线程,线程可能处在3种状态下,一是等待在田间变量notEmpty条件下,二是正在运行线程任务,三是任务执行完已经进入while(isPoolRuning)里面想获取锁,三种情况分别讨论,首先将执行状态转换为false然后加锁,唤醒正在阻塞的线程,告诉他们现在任务队列不空了,但是不管空不空,当Func执行一遍后,会重新进入循环,会经过下面代码。情况一:当pool先获取到锁,然后执行到。
2025-09-01 18:00:48
800
原创 网络编程socket
I/O多路复用用一个单独的线程(或进程)来监视多个文件描述符(通常是网络套接字),一旦某个描述符就绪(可以读、可以写或有异常),就能够通知应用程序进行相应的读写操作。它解决了“一线程一连接”模型资源消耗巨大的问题,使得单线程服务万级并发连接成为可能。用户态通过创建 epoll 实例,epoll_ctl注册需要监控的 socket 和事件。内核通过红黑树管理所有注册的事件,并在 socket 状态变化时通过回调函数将事件放入就绪链表。用户态通过epoll_wait。
2025-08-31 19:56:48
959
原创 线程池项目代码细节3
cpp目的:记录线程最后一次执行任务的时间,用于CACHED模式的空闲超时判断cpp作用域锁{}作用域确保锁在取到任务后立即释放减少锁粒度:只在访问共享队列时加锁,执行任务时不持有锁。
2025-08-31 15:09:41
888
原创 内存管理(智能指针,内存对齐,野指针,悬空指针)
野指针指的是未初始化的指针变量。它指向的内存地址是随机的、未知的。悬空指针指的是指针指向的内存已被释放,但指针本身仍然保存着原来的地址。内存对齐指的是数据在内存中的存储地址必须是某个值(通常是2、4、8、16等2的幂次方)的整数倍。智能指针所有权拷贝 / 移动引用计数主要用途unique_ptr独占禁止拷贝,允许移动无管理单个对象,不共享所有权shared_ptr共享允许拷贝和移动有多对象共享同一资源weak_ptr无所有权允许拷贝和移动不影响解决循环引用,弱引用资源。
2025-08-30 21:59:59
927
原创 leedcode 算法刷题第二二天
适应unordered_set去重如果在本层使用过这个元素则跳过,注意unordered_set的生命周期为一层,for循环也是一层。使用一个数组记录是否保存过该元素,不记录其实位置,每次都是从0开始循环。这个题是上面两个题的融合。
2025-08-30 12:00:40
166
原创 线程池项目代码细节
这行代码定义了一个名为ThreadFunc的类型别名。它表示一个,这个对象接受一个int类型的参数(通常是线程ID)并且返回void。是一个通用的函数包装器,可以存储任何可调用的目标(函数、lambda表达式、bind表达式、函数对象等)。: func_(func) // 用传入的func初始化成员变量func_, threadId_(generateId_++) // 用一个静态计数器生成唯一线程ID{}Thread类封装了一个线程。它的构造函数接受一个ThreadFunc。
2025-08-29 23:09:18
497
原创 线程池内容1
原子操作意味着一个操作是不可分割的。在执行过程中,不会有任何其他线程看到中间状态,也不会被其他线程干扰。要么完全成功,要么根本没发生。
2025-08-29 18:58:32
527
原创 leedcode 算法刷题第二一天
思路,分割需要判断每个分割位置是否正确,是否合规,最后插入前别忘记判断插入后其实位置改变。进入函数就开始插入。
2025-08-29 11:49:07
248
原创 Linux V4L2驱动开发USB摄像头
本系统基于Qt框架和Linux V4L2驱动开发了一套完整的USB摄像头实时采集与显示解决方案。采用多线程架构将摄像头采集线程与UI显示线程分离,通过信号槽机制实现线程间安全通信。集成了完善的错误处理机制,包含设备检测、ioctl操作监控和异常恢复功能,保证系统稳定运行。提供设备无关接口设计,支持多种摄像头设备的热插拔和动态配置,通过标准化信号槽接口实现采集数据与界面显示的高效协同,最终实现了低延迟、高效率的实时视频采集显示系统。
2025-08-28 16:42:23
456
原创 leedcode 算法刷题第二十天
思路这个题整体不难,就是有一些细节,每次递归需要传入+1,但是因为可能有重复元素,所以要去重,排序,然后当相邻两个元素相等说明会产生同样的组合所以continue。思路只有值超过目标值时才会返回,i都不行才进入下一个数字。关键在于,区间判断是否为回文子串。
2025-08-28 13:13:57
192
原创 leedcode 算法刷题第十九天
思路:递归,加回溯,主要是要理解,pop_back的过程每次都能pop干净。相比与上道题目多了一个,求总和的操作,将sum也加入递归和回溯。
2025-08-28 00:18:22
235
原创 leedcode 算法刷题第十七天
思路:从根节点遍历,只要值在p,q中间就是他们的公共根节点,由于是2叉搜索树,所以不需要全部遍历一遍。思路:·四种情况分别讨论,删除节点前如果节点变化别忘记保存原来的指针。通过指针引用的方式给对应节点赋值。
2025-08-25 17:43:46
157
原创 leedcode 算法刷题第十五天
就是迭代法,不断生成新的数组根据数组生成新的2叉树连接根节点。虽然6>3(直接父子关系正确),但是6>5(违反了BST规则,左子树的所有节点都必须小于根节点5)。最开始我只检查了,当前根节点和左右子树,为考虑上述问题,将子节点显示范围解决该问题。1 6 ← 这个6比根节点5大,但它在左子树中!不断判断是否为空,2个为空结束一个为空加一个。检查节点3的右子节点6:6>3,通过 ←。检查节点3的左子节点1:1<3,通过。检查左子节点3:3<5,通过。检查右子节点8:8>5,通过。
2025-08-22 13:59:56
348
原创 leedcode 算法刷题第十四天
112. 路径总和if(ishas(root->right,targetSum))return true;容易忘掉返回值。有点麻烦
2025-08-21 10:03:12
216
原创 leedcode 算法刷题第十三天
解题思路:求是否是平衡二叉树就是看左右子树的高度,采用后续遍历,递归方法,左右中,当左右相差大于1时返回-1,不是平衡二叉树。终于遇到送分题了,这个号简单。解题思路,递归加回溯。
2025-08-20 15:32:23
233
原创 leedcode 算法刷题第十二天
解题思路:递归方法,不断循环放入子树,交换子树节点,注意边界值,if(root==nullptr){解题思路:每次当节点为空返回0,在返回值那里没回退一层就++,最后为总层数。解题思路,就是递归判断,同时注意边界条件。太难了,回头在理解理解。
2025-08-19 13:30:20
223
原创 leedcode 算法刷题第十一天
解题思路:采用队列先进先出,没出一个元素就把他的左右孩子加进去,保证层级的先进先出,记录每层的个数保证每层孩子都进去。解题思路:根左右,上面递归,下面非递归栈。
2025-08-18 12:51:47
277
原创 leedcode 算法刷题第十天
解题思路:首先要了解什么是逆波兰表达式,就是2茶树的后续遍历,根据栈的思想先进后出,先放入数字,当发现是表达式时就不放入而是取出栈中元素求值,重复操作即可,stoi,stoll。
2025-08-16 12:22:24
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅