- 博客(162)
- 资源 (2)
- 收藏
- 关注
原创 C++网络编程
套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。计算机是通过TCP/IP协议进行互联从而进行通信的,为将TCP/IP协议进行隐藏,引出套接字这个概念。套接字可以看成【IP地址+端口号】
2024-03-14 21:05:15 353
原创 C++11新特性-智能指针
程序在运行的时候,临时变量以及函数会放在栈中。动态创建的东西会放在堆中。栈中的东西操作系统会自动释放,堆中的东西,需要程序员手动释放。
2024-03-10 19:57:59 514
原创 Qt序列化
Qt中提供了二进制格式的序列化。对QT中原生的数据类型,例如:QString、QMap、QHash等,不需要做其它额外的操作,利用QDataStream直接就可以序列化到文件中。
2024-03-09 20:49:53 191
原创 C++Boost的序列化
date;侵入式版本{}{}return out;} date;date dr;序列化版本控制123public:CPerson();;~CPerson();private://要想序列化用户定义的类型 必须定义seriallze函数//serialzation不应该被显示调用 因为它仅在序列化或者反序列化的时候调用。
2024-03-09 20:48:34 959
原创 Git常用操作
并且git还告诉我们 fix conflicts and then run “git rebase --continue”,意思是解决冲突然后执行git rebase --continue命令,其实git rebase --continue的正确操作应该是确认处理好冲突后则将调整好的文件添加到暂存区,并执行git rebase --continue命令告诉git,我已经解决好冲突了,那么冲突的文件中就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当有这些冲突存在时,
2024-02-21 11:33:21 636
原创 结构体字节对齐
以上结构体字节对齐之后,sizeof(st1)=24。以上结构体字节对齐之后,sizeof(st)=16。按照struct中最大的基本类型的整数倍进行对齐。
2024-01-26 23:20:36 135
原创 C++设计模式
计算器抽象类,里边有两个虚方法,一个获得当前的计算结果,另一个设置操作数。其他的加减乘除类均可以继承自计算器抽象类。如果再想增加一个取余类的话,只需重复增加新的类即可,不用在原有类代码的基础上进行修改。提升了代码的可扩展性。增加新功能,通过增加代码的方式实现,而非修改源代码。
2023-12-03 20:36:36 648
原创 102. 二叉树的层序遍历
if (!//自定义循环队列最大可存储节点个数为2000//当前层父节点数量int());//取出当前父节点,并将所有的父节点的孩子节点入队i++){return ans;
2024-05-05 20:54:09 416
原创 148. 排序链表
进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?2、遍历一遍之后,自动整理完成排序,1、利用优先队列结构构造小顶堆,3、之后使用尾插法插入即可。
2024-05-03 00:04:06 278
原创 12. 整数转罗马数字
通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。首先想到的是使用map或unordered_map容器,但是map容器会对key值进行自动排序,unordered_map根据哈希值进行存储,不能完全保证顺序排列。例如, 罗马数字 2 写做 II ,即为两个并列的 1。解释: M = 1000, CM = 900, XC = 90, IV = 4.解释: L = 50, V = 5, III = 3.1、定义基础组合规则。
2024-04-28 13:12:46 347
原创 LCR 099. 最小路径和
3、动态转移方程:目标位置的结果为:自身的结果+=(左边和上边的最小值)即:sumDist[i][j]+=min(sumDist[i][j-1],sumDist[i-1][j]);1、结果表示:sumDist[i][j]表示到达第i行第j列的单元格时,最小的路径和。2、边界条件:sumDist[i][0]+=sumDist[i-1][0];解释:因为路径 1→3→1→1→1 的总和最小。
2024-04-26 17:21:02 458
原创 146. LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)lRUCache.get(1);// 返回 -1 (未找到)lRUCache.put(1, 1);// 缓存是 {1=1}lRUCache.get(1);
2024-04-23 22:27:39 740
原创 279. 完全平方数
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。3、动态转移方程:dp[i]应为i之前【最大平方数的剩余值】所需要的最少完全平方数的个数+1。1、dp[i]表示第i个数最少需要多少个完全平方数。2、边界条件:dp[0]=0;解释:12 = 4 + 4 + 4。解释:13 = 4 + 9。
2024-04-22 21:01:37 150
原创 300. 最长递增子序列
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。3、动态转移方程:dp[i] = max(dp[i], dp[j] + 1);解释:最长递增子序列是 [2,3,7,101],因此长度为 4。
2024-04-22 20:15:00 384
原创 55. 跳跃游戏-动态规划
输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。动态规划思路:1、dp[i]表示在该位置可以跳跃的最大长度;
2024-04-21 18:32:21 154
原创 LCR 023. 相交链表
交叉链表结构本质上指的是链表中两个节点所指向的地址相同,而非链表节点中的val相同。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。因为交叉链表,并不是链表节点的值相等,而是链表指针所指向的地址相同。解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
2024-04-20 22:20:26 704
原创 198. 打家劫舍
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。//偷第1间房屋所能得到的最大金额,为max(第0间房屋的金额,第1间房屋的金额)//偷第0间房屋所能得到的最大金额,为第0间房屋的金额。第k-1间房屋,只能偷第k-2间房屋。
2024-04-18 22:20:28 706
原创 LCP 55. 采集果实
2=6 第 2 批需要采集 1 颗第 2 类型果实,需要采集 1 次,耗时为 2*1=2 返回总耗时 2+6+2=10。解释: 由于单次最多采集 3 颗 第 0 批需要采集 2 颗第 0 类型果实,需要采集 1 次,耗时为 2。解释: 由于单次最多采集 2 颗 第 0 批需要采集 3 颗第 0 类型果实,需要采集 2 次,耗时为 1。1=2 第 1 批需要采集 4 颗第 1 类型果实,需要采集 2 次,耗时为 3。2=2 第 1 批需要采集 5 颗第 0 类型果实,需要采集 3 次,耗时为 1。
2024-04-18 21:23:10 700
原创 334. 递增的三元子序列
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6。进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?解释:任何 i < j < k 的三元组都满足题意。解释:不存在满足题意的三元组。
2024-04-17 19:55:14 144
原创 62. 不同路径
但是到达目标位置的左边和上边均有多条路径,因此到达目标位置的路径即为:到达目标位置左边的路径数+到达目标位置上边的路径数。由上图可知,机器人到达第1行第1列的路径只能通过两种方式,即先到达目标位置的左边,或先到达目标位置的上边。首先,确定动态规划数组。由于当前是一个二维方式的路径,因此定义二维数组。动态数组的含义:dp[i][j]为到达第i行第j列的路径总数。从左上角开始,总共有 3 条路径可以到达右下角。其次,初始化dp矩阵,由于机器人。因此,初始化dp矩阵为。之后,确定动态转移方程。
2024-04-15 10:25:40 322
原创 51. N 皇后
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。解释:如上图所示,4 皇后问题存在两个不同的解法。
2024-04-04 17:54:45 285
原创 69. x 的平方根
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。在range(0,x)的中查找一个合适的整数,使得该整数的平方等于x。暴力求解(遍历range(0,x)):效率较低,时间复杂度:O(n)二分查找:时间复杂度:O(log(n))由于返回类型是整数,结果。
2024-03-31 15:16:56 341
原创 122. 买卖股票的最佳时机 II
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。总利润为 4 + 3 = 7。,即为可以取得的最大利润。
2024-03-26 23:19:57 696
原创 121. 买卖股票的最佳时机
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。解释:在这种情况下, 没有交易完成, 所以最大利润为 0。持续比较当前价格与历史最低点的差。
2024-03-26 21:43:25 357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人