自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 9.13信锐面经

在一个项目中,重复包含两个或以上头文件就会出现问题。可以使用static定义一个静态变量区别:一、存储位置和生命周期不加static的成员变量: 存储在类的每个对象实例中。每个对象都有自己独立的一份非静态成员变量的副本。生命周期与对象的生命周期相同。当对象被创建时,非静态成员变量被分配内存;当对象被销毁时,非静态成员变量的内存被释放。加static的成员变量: 存储在静态存储区。不依赖于任何特定的对象实例而存在。生命周期从程序开始运行时起,到程序结束时止。

2024-09-13 21:32:26 1222

原创 9.12日常记录

在使用的时候,首先需要把关注的 Socket 集合通过 select/poll 系统调用从用户态拷贝到内核态,然后由内核检测事件,当有网络事件产生时,内核需要遍历进程关注 Socket 集合,找到对应的 Socket,并设置其状态为可读/可写,然后把整个 Socket 集合从内核态拷贝到用户态,用户态还要继续遍历整个 Socket 集合找到可读/可写的 Socket,然后对其处理。重写:在派生类中,有和基类虚函数同名,同参数列表,同返回类型的函数,用于改变基类虚函数的行为。2.不返回有用的错误信息。

2024-09-12 21:56:15 1169

原创 9.11日常记录

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

2024-09-11 23:12:07 205

原创 9.9日记录

给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。双指针yyds,一个指针指向最后一个字符串的最后一个字符,另一个指针指向第一个,相减即可。public:i--;int j=i-1;=' '){j--;return i-j;

2024-09-10 11:43:59 788

原创 9.8笔试记录

t:制表符,用于在输出中进行水平制表,相当于一定数量的空格,通常是 8 个字符的位置。\:反斜杠本身,用于在字符串中表示一个反斜杠字符。1.sizeof是一个运算符,用于计算对象的大小,它的计算是在编译阶段完成的,而不是在程序运行的阶段,sizeof的结果与字节序无关。2.strlen是一个函数,用于计算字符串的长度(不包括终止符\0),它的计算是在程序运行阶段完成的。\r:回车符,将光标移动到当前行的开头,可用于覆盖当前行的部分内容。\b:退格符,将光标向左移动一个位置,可用于删除前一个字符。

2024-09-08 23:01:37 756

原创 9.6学习记录+三场笔试

短作业优先。

2024-09-07 12:03:39 1189

原创 9.5LeetCode

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:和删除有序数组的重复项1很相似,1是不允许有两个一样的元素,而2是不允许有三个一样的元素,这就需要额外定义一个len来管理长度问题了,如果出现两个以上相等的元素,便不会进入if语句中,不会更改nums数组。

2024-09-05 18:55:40 1145

原创 9.4日常记录

这里定义了一个字符数组。这个字符串 "Hello, World!" 的内容被直接存储在这个数组中,数组的大小由字符串的长度加上一个额外的位置用于存储字符串结束符'\0'自动确定。例如,这个数组的大小为 13(12 个字符加上一个结束符)。可以修改这个数组中的内容,因为它是在栈上分配的可修改的内存区域。: 这里定义了一个字符指针,它指向一个字符串常量。这个字符串通常存储在只读的内存区域(如常量数据段)。不能通过这个指针修改所指向的字符串内容,因为它指向的是常量。

2024-09-04 22:45:33 1168

原创 day45.动态规划

思路: 和最长公共子序列也是蛮像的,不过else的语句里只有dp[i][j-1],没有dp[i-1][j],因为s是子串,不能用子串来判断。注意 i和j可以等于是,s,size和t.size() 因为 让i可以等于s.size()是为了完整地检查s是否是t的子序列,确保考虑到了s的所有字符与t的不同部分进行匹配的情况。思路:定义一个dp数组,这道题目的核心就在于推出递归公式,dp[i]意义在于包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。是数组中的一个连续部分。

2024-08-30 20:40:44 619

原创 day44.动态规划

如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。思路:dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

2024-08-29 23:23:06 643

原创 补录.day43动态规划

想要推导出递推公式,dp[i]=max(),由于是要求最大的长度,所以取最大值,最大值分别是(如果nums[i]大于nums[j]的话)dp[i],和dp[j]+1二者取一。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

2024-08-29 18:51:23 460

原创 day.43 动态规划+MySQL

思路: 同II挺像的 只不过他最多限制了两笔交易 要想找出两笔交易的最大值的话就需要考虑4种状态了,如下所示。注意递推公式:dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。思路:和买卖股票的最佳时机II 挺像的,只需要加上手续费操作就可以了。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。编写一个解决方案,找出至少有五个直接下属的经理。

2024-08-27 22:37:45 547

原创 day41.动态规划

查找这些员工的id,他们的薪水严格少于$30000 并且他们的上级经理已离职。当一个经理离开公司时,他们的信息需要从员工表中删除掉,但是表中的员工的manager_id 这一列还是设置的离职经理的id。思路:dp[i][1] 表示第i天不持有股票所得最多现金 dp[i][0] 表示第i天持有股票所得最多现金。写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

2024-08-26 23:21:11 388

原创 day40.动态规划

思路:此题有些意思,就是上述表格中计算时间的题目 由于共有三台机器 ROUND(..., 3)函数: 这个函数用于将括号内的表达式结果进行四舍五入,保留到小数点后三位。根据代码随想录的思路,使用记忆化递归来做,用一个哈希表来存储树的节点和对应的值,因为树形dp存储的值是(当偷这个节点时可以获得的最大价值) 这样的话当在遇到这个节点之后就可以不用计算直接返回此值。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额。编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id。

2024-08-25 23:42:53 815

原创 day39.动态规划+MySQL数据库复习

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路: 如果只有一家 那直接就偷;首先初始化数组,dp[i]的含义是。

2024-08-24 23:43:28 1106

原创 day38.动态规划+MySql数据库复习

完全平方数 是一个整数,其值等于另一个整数的平方;1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true。MySQL数据库是一种关系型数据库,由多张表相互连接的二维表组成的数据库,注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。多行注释: /* 注释内容 */

2024-08-23 23:43:05 681

原创 day37动态规划+三.Github链接本地仓库

给你一个二进制字符串数组 strs 和两个整数 m 和 n。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集。思路:这道题更像是另一种的0-1背包问题 其中m和n相当于背包容量,字符串本身的个数相当于物品的价值(value[i])。首先初始化dp数组,然后要统计每个字符串的0和1的数量,才能进行下面的操作,

2024-08-22 22:58:25 1321

原创 day36.动态规划+重载操作符

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。思路:这道题和分割等和子集很像的。

2024-08-22 00:39:09 644

原创 day35.动态规划--代码随想录0-1背包问题

思路:我们要直到dp[i][j]代表从下标(0,i)的物品里任意取,放到背包容量为j的背包里,最大价值为dp[i][j],而动态规划问题就是保存局部最优解,确定递推公式:如果当前背包容量小于当前物品的容量,就继承上一个 i-1的值,否则的话,就判断,是i-1的最优解大一些,还是加上当前的物品的价值再加上剩余的dp[i][j]最优解大一些**(难点),取二者较大的值,继续遍历,最后在dp数组的最后就是我们0-1背包问题的最优解。删除元素的话要注意,删除元素后,元素所对于的空间并没有被删除。

2024-08-20 23:40:53 884

原创 day33动态规划

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。2.确定递推公式,想要求出dp[i][j]只有两个方向可以推出来,1.dp[i-1][j],2.dp[i][j-1]. 所以dp[i][j]应该等于他们两个的和。思路:机器人从0,0出发,到m-1,n-1节点。

2024-08-19 21:51:18 1001

原创 day32+学习记录

思路:这道题由于前两个楼梯不需要花费体力,所以直接初始化dp数组如下,然后由题意可知,dp[i]:到达第i台阶所花费的最少体力为dp[i]。可以推导出,递推公式是由,dp[i]==dp[i-1]+cost[i-1]和dp[i-2]+cost[i-2]的最小值,这样就可以推导出登顶之后的最小花费了。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。思路:同理, 爬到第i层楼梯,有dp[i]种方法,由于第三层楼梯有dp[1]+dp[2]种方法,所以可以得出递推公式。需要 n 阶你才能到达楼顶。

2024-08-17 22:50:27 1522

原创 day.26贪心算法2

首先,将数组排序,定义一个自定义静态函数,让绝对值最大的数排在前面,然后for循环遍历,如果k大于0且nums的值小于0,将其乘-1,k--,遍历完成后,如果此时k不为0,代表数组中只剩下正数了,就去数组中最小的数,将他变为负数,最后将数组的所有元素相加。思路: 最大利润2虽然是中等题,但并不难,就是局部最优推出整体最优,当后一天的价格大于前一天时,就将其卖出记录利润,此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑。判断你是否能够到达最后一个下标,如果可以,返回 true;

2024-08-16 22:45:10 612

原创 GET新知识-如何通过Ubuntu和Windows进行文件交互

点击添加可选功能,找到openSSH并下载。安装完成之后,要记得去服务里面看一下有没有启动,没有启动的话要手动启动一下.但是windows@192.168.120.1's password: 这个passwd无论怎么试,都无法失败。2.在Windows上也安装open SSH,具体位置在这里:在windows搜索框中输入可选,点击可选功能。知识记录篇改求助篇了呜呜呜~~~ ,到最后一步passwd咋样都无法链接了。然后就会出现这个,输入Y确认,即可安装成功。有大佬知道这是怎么回事吗?

2024-08-15 19:31:29 177

原创 代码随想录--回溯章节补录

思路: 全排列二和全排列一的不同就是全排列二包含重复的元素,所以要加一个去重的操作,给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

2024-08-14 20:06:49 260

原创 贪心算法补录:

思路:将数组排序,因为贪心算法是根据局部最优推出整体最优吗,此题的局部最优就是优先将最大的饼干给胃口最大的孩子,就是用双指针均指向(排序好的)二维数组的尾部,然后比较判断,如果饼干满足,count++,指针向前移动,否则将指向孩子的指针向前移动,最后返回count即可。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。

2024-08-14 14:43:26 383

原创 day23回溯算法

思路: 总的来说吧,与昨天的77.组合挺像的,有不同的地方就是动态数组中的字可以被无限重复的被选取,因此只需要在startIndex上动一下手脚就好了,如下所示,传入时传的是当前的i值即可了,这样的话就可以满足重复被选取查找了,如果在for循环中i赋值的是0而不是startIndex的话,那么返回值就会多很多,将那些重复的值 [2, 2, 3] 和 [3, 2, 2] 这样的重复组合也算进去了。给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。

2024-08-11 22:41:08 1011

原创 补录:day023-回溯法

思路: 和上一道题很像,主要就是和组合二大体思路的去重,树层去重和树枝去重,通过一个used数组来记录是否使用过这个数字,当当前的值与前一个值相等时,并且前一个值为FALSE,代表是树层去重,无需遍历当前的树枝了,因为前面的树枝遍历已经包含了这个的树枝遍历,还需要注意的一点是,因为子集是找出所以的组合并记录,所以要在回溯函数开头将一维数组存到二维数组中。思路:组合题目二,这个题目与组合一的区别在于,本题目中的candidates的每个元素只能使用一次,而且本题中的candidate数组中会有重复的元素。

2024-08-10 20:38:44 1280 2

原创 Cpp中的this指针--复习记录

每个类都有一个this指针,我们的非静态成员函数可以通过这个this指针来操作对象的成员属性。this指针存储的就是类的实例的地址,this指针时时刻刻指向的都是这个实例对象本身。由下图可知:我在主函数中栈上创建了一个类的实例(由操作系统自动回收释放),然后再用s调用learn打印出当前this指针的地址,由终端可见,此时类对象地址与this指针的地址是相同的。static是从C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。链接属性由外部变成内部,即对其他文件不可见,只能在本文件使用。

2024-08-08 22:23:27 1112

原创 day22回溯学习记录第一天- - -代码随想录

思路:与上一道题极为相似,不同点在于一个是给定K的范围,一个是固定K的范围,这一道题的K的固定范围是小于等于9,因此在上一道题的代码中略微修改一些,定义一个全局的变量用来记录和的,然后终止条件就是判断当前的和是否为规定的和,当前的大小是否为规定的大小,若都满足,返回。首先返回值为void类型,传入参数为n,k,和startIndex,他代表下一次递归搜索的起始位置,终止条件就是当前的临时存储元素数量等于K 返回,单层搜索逻辑如下图可知。思路:回溯的经典题目,回溯的整体结构类似于二叉树,如下图所示。

2024-08-08 00:17:35 507

原创 day021二叉树最后章节

思路: 二叉搜索树的中序遍历就是有序升序数组,所以想要将它在转换成二叉树,我想到的方法就是通过递归来做,通过中间节点找到二叉搜索树的根节点,然后根据left和right双指针逐层递归构造左右子树。思路:最开始没有判断当当前节点小于最小值时,当前节点的右侧节点的情况,和当前节点大于最大值时,当前节点的左节点的情况,所以出错了,因此要在代码中判断一下这两种情况。思路: 累加树 由题意可知,在二叉搜索树中的递归顺序是右中左的顺序,创建一个新的函数,进行右中左的遍历,在遍历中要将节点的值记录下来,用来做累加。

2024-08-06 20:40:43 698

原创 Git分布式版本控制--2+day018 LeetCode235 701 450

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

2024-08-06 09:43:26 1070

原创 Git分布式版本控制工具--1

Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的。我们使用Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一样的。小强在Analysis.java文件中的 第50行声明了一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记 忆中了。分布式版本控制工具 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无 需要联网了,因为版本库就在你自己的电脑上。

2024-08-04 22:01:41 480

原创 day018二叉树

思路:首先要理解公共祖先的概念,然后,这道题的思路是递归,深度优先遍历二叉树中的每个节点,当找到qp节点就返回给上一层,(定义两个节点用于存储)然后判断这两个节点是否为空,若不为空代表找到了p或q的值,判断,如果左右都不为空,返回当前的根节点即可,如下图左侧的情况,若左为空右不为空,代表右子树遇到了pq,返回right。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。

2024-08-03 19:01:15 357

原创 day017二叉树章节

思路:此题的解法较为简单清晰,定义一个中序遍历函数,将节点的值按照中序遍历的顺序来存入动态数组中,此时应是有顺序的,且为从大到小,(因为是二叉搜索树嘛,中序遍历就是有序的),在主函数中判断此数组是否有序,若有序,则是二叉搜索树,若无序,则不是,返回FALSE;思路:这道题是深度优先遍历的经典题目,根据二叉搜索树的性质:节点的左子树,只包含 小于 当前节点的数。节点的右子树只包含大于当前节点的数。据此写出递归,比当前节点大的向右边找,比当前节点小的向左边找。3:节点的右子树只包含 大于 当前节点的数。

2024-08-02 23:56:16 236

原创 day015二叉树章节

思路:二叉树的后续遍历的最后一个节点就是当前要构造这个二叉树的根节点,在中序遍历中找出这个根节点,根节点的左右两边,就分别是左子树和右子树,定义一个动态数组代表左子树的中序遍历,在定义一个代表右子树的中序遍历,要注意将后序遍历的动态数组-1,因为后序数组的最后一个元素指定不能要了,这是切割点 也是 当前二叉树中间节点的元素,已经用了。然后在定义两个后序的左右动态数组,通过后序的左右区间来去切割中序的左右区间,然后再用中序的左右区间去切割后序的左右区间,然后递归处理左右区间。叶子节点 是指没有子节点的节点。

2024-08-01 22:50:02 379

原创 day014(二叉树章节)+北境互娱游戏开发一面

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。思路:深度优先,根据左节点的性质--节点A左孩子不为空,节点A的左孩子的左右节点为空,那么此时,节点A的左孩子就是左节点,据此性质,通过递归找到左节点并进行相加操作,最后返回。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。思路:简单,层序遍历,每遍历一次,将队列中节点个数累加起来,最后返回即可。3.确定单层递归逻辑。

2024-07-31 22:46:40 941

原创 day014二叉树

思路:这道题和最大深度不同,如果按照最大深度那么写的话,就不是根节点到子节点的最短路径了,如果根节点的左节点为空,返回的就是1,该函数就把根节点高度作为最小深度了,所以要进行添加条件,判断如果左节点不为空右节点为空,返回左节点的长度+1(代表可以继续向左节点遍历),反之亦然。3.确认单层递归逻辑。将左节点的左节点和右节点的右节点传入递归函数(外侧)二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。将左侧节点的右侧节点和右侧节点的左侧节点传入递归参数中(内侧)叶子节点是指没有子节点的节点。

2024-07-30 22:10:24 448

原创 day013二叉树章节(深度遍历和迭代遍历+层序)

思路:1.移除多余空格:采用双指针法移除空格,快指针先移动,当指向不为空且slow不是第一个位置时,将当前位置置为空格,slow递增(因为字符串的首尾位置不能为‘ ’),否则,将fast指向的字符赋值给slow指向的位置,直到fast再次指向空。最后,根据slow的大小调整s字符串的大小。然后,定义一个start=0标记首字符位置,遍历s这个字符串,当i指向空的时候,i-1,此时的i-1就是指向第一个字符串的末尾位置,然后调用翻转函数翻转,将start设置为i+1,为指向下一个字符串的首字符,继续遍历。

2024-07-29 23:47:11 563

原创 day010.补录--栈与队列+好未来客户端开发一面总结

i++){1.可能是因为客户端的原因,他开头就问了我很多关于线程池的问题,我对此没多少准备,只能凭借日常积累回答。。。2.之后就开始问了一些Linux系统的基础问题,线程和进程的区别,子进程和父进程地址空间是共享的吗?

2024-07-29 00:15:12 885

原创 day010栈和队列章节

思路:首先判断,当头节点不为空且两位置相等时,返回头节点,然后,由于我们可能要操作头节点,所以要定义一个虚拟头节点来方便对头节点的操作,之后,定义一个节点pur,让他指向要操作节点的前一个结点,定义一个cur节点指向pur的下一个节点,然后进入循环,让next节点指向cur节点的下一个节点,然后将cur节点指向下一个节点的下一个节点,然后让next节点指向pur的下一个节点,(因为需要让pur指向已经反转之后的开头节点),然后让pur->next=next;int pop() 从队列的开头移除并返回元素。

2024-07-26 23:43:02 1143

空空如也

空空如也

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

TA关注的人

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