- 博客(31)
- 收藏
- 关注
原创 面试经典题---125.验证回文串
外部while循环保证 left<right,内部分别使用while循环找出此时最左和最右的字母数字字符(使用自定义函数 isLegal 来判断字符是否是大小写字母或数字,可以直接用c++自带的isalnum函数);比较两指针所指向字符的小写形式是否一致,不同则直接返回false;首先使用left和right两个指针分别指向字符串首尾;
2024-01-12 09:04:28
440
原创 面试经典题---6.Z字形变换
每轮循环中元素下标index从i开始,再使用while循环确定当前Z字形这一行所对应的字符,通过add和step确定Z字形这一行当前元素的下一元素在原字符串中的下标(第一行和最后一行,下一元素的下标增加了step,其余行,下一元素下标多了add)之后使用for循环,每轮确定最终Z字形的一行数据,因此共有numRows次循环。首先定义了3个变量:index、add和step。N字形示意图,其中x代表numRows。
2024-01-05 21:18:49
629
1
原创 面试经典题---14.最长公共前缀
主要思路是定义一个函数longestCommonPrefix(const string s1,const string s2)用于获取字符串s1和s2的最长公共前缀字符串,之后依次计算strs中的相邻字符串的最长公共前缀。可以一开始加一个判断:若strs的大小为0,则直接返回空字符串""
2024-01-03 20:28:48
708
1
原创 算法经典题---42.接雨水
(1)若height[i]小于栈顶元素对应的height数组值,则直接向m_stack中插入i;(2)若height[i]等于栈顶元素对应的height数组值,则弹出栈顶元素后再插入i;栈顶作为凹槽,当前元素是凹槽右边,栈中前一元素是凹槽左边。单调栈:栈中保留height元素下标,从栈底到栈顶的下标对应的数组元素值从大到小。相同元素保留只最右边的。
2023-12-27 18:23:20
788
1
原创 面试经典题---135.分发糖果
由于需要考虑相邻两个孩子的评分才能确定当前孩子获得的糖果数,因此需要正向和反向两次遍历评分数组分别考虑其左侧和右侧孩子评分的大小关系。
2023-12-26 11:24:35
903
1
原创 NODLINK:一个细粒度APT攻击在线检测与调查系统
process_behavior.py(路径:src/Sysdig/process_behavior.py)2.anomaly.json(数据示例)1.benign.json(数据示例)
2023-12-24 23:23:21
1879
6
原创 面试经典题---380.O(1)时间插入、删除和获取随机元素E
由于题目要求O(1)内以相等的概率随机返回集合中的一项,因此这道题不能单独使用unordered_set,需要使用数组和哈希表结合的方法。使用数组nums来为各个元素绑定一个下标,保证元素分布在numsd的[0,range]下标范围内,从而实现以相同的概率随机访问元素。变量range用于记录元素数目,即数组nums中[0,range]范围的都是有效元素;my_map[val]是元素val在数组nums中的下标,将哈希表与数组关联起来。1.定义一个容量足够大的数组nums,用于存放各个元素val;
2023-12-22 17:35:20
601
原创 面试经典题---274.H指数
接着定义初值为数组citations中元素个数的变量h,循环遍历数组找出h可能的最大值,即刚好有h个元素的值大于等于h。首先使用sort()函数对数组升序排序;
2023-12-21 09:47:41
567
1
原创 面试经典题---45.跳跃游戏(2)E
变量currange记录当前轮次的可达范围(边界),变量maxrrange记录当前轮次内可达的下一轮最大范围;当i取到currange时,代表已到达当前轮次的边界,即当前轮次结束,再走一步开始新一轮。(for循环从0到n,因为题目保证了nums[n-1]是可达的)
2023-12-17 20:58:29
54
1
原创 面试经典题---55.跳跃游戏
变量step记录当前位置元素可跳跃的最大距离,range记录当前元素可跳跃范围内全部元素可跳跃至的最大距离。只有range的覆盖到了数组最后一位元素,才表示可以到达最后一个下标。可以省略变量step,直接取range = max(range, i + nums[i])
2023-12-17 19:10:57
67
1
原创 面试经典题---122.买卖股票的最佳时机(2)
/ 第i天不持有股票。// 第i天持有股票。使用变量buy和sell分别记录每次买入和卖出股票天数在数组中的下标,sum记录利润;当相邻两天的股票价格递增时,会买入股票,直至股票价格降低,在前一天卖出股票。二维数组dp[i][j]用来表示第i天持有/不持有股票所获得的最大利润;
2023-12-16 18:52:26
31
原创 面试经典题---121.买卖股票的最佳时期
sum累加dif中的元素,可以累加负数,只要确保sum值不为负数,sum值为负数时代表亏,res用来记录过程中可获取的最大利润。在for循环内部直接用while循环累加sum,一次实现多步累加;一轮for循环的内部是在计算第i天买入能获得的最大利润。数组dif用来记录相邻两日买入卖出所得的差额;(121)买卖股票的最佳时期。
2023-12-15 20:11:29
29
原创 面试经典题---189.轮转数组
接着将数组整体翻转,然后再将数组划分为两部分:[0,k-1],[k,n-1]分别将其翻转。首先对轮转数k进行处理,将k转换到[0,n-1]范围内;
2023-12-14 22:25:27
39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人