- 博客(102)
- 问答 (1)
- 收藏
- 关注
原创 c/c++八股文
函数指针是一种特殊的指针变量,它指向一个函数,而不是指向一个数据对象。函数指针可以用来动态调用函数,这在某些情况下非常有用。返回类型 (*指针变量名)(参数列表);在这个例子中,ptr_add就是一个函数指针,它指向add函数。函数指针的使用场景包括:将函数指针作为参数传递给其他函数,在特定事件发生时调用。常见于事件驱动编程、GUI 编程、排序算法等。根据运行时的条件,选择不同的函数进行调用。可以实现更灵活的程序结构。将一组相关的函数组织成一个函数指针数组。
2024-09-23 11:12:22
6677
1
原创 翻转k个0
统计当前窗口0的个数,0的个数大于k时,滑动窗口左移,0的个数减1。滑动窗口连续1的个数为right-left+1。给定一个二进制数组和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。
2024-09-22 22:34:10
288
原创 leetcode14.最长公共前缀
输入:strs = [“flower”,“flow”,“flight”]输入:strs = [“dog”,“racecar”,“car”]编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。strs[i] 仅由小写英文字母组成。解释:输入不存在公共前缀。
2024-09-16 18:44:57
406
原创 leetcode125.验证回文串、leetcode.5最长回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。给你一个字符串 s,如果它是 回文串 ,返回 true;输入: s = “A man, a plan, a canal: Panama”解释:“amanaplanacanalpanama” 是回文串。解释:在移除非字母数字字符之后,s 是一个空字符串 “”。由于空字符串正着反着读都一样,所以是回文串。解释:“raceacar” 不是回文串。输入:s = “race a car”输入:s = " "
2024-09-15 20:56:15
283
1
原创 leetcode141.环形链表、leetcode160.相交链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true。
2024-09-14 20:09:59
824
原创 leetcode53.最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]子数组是数组中的一个连续部分。输入:nums = [1]
2024-09-14 20:00:06
413
原创 华为od手撕-数组元素top1
查找一个数组中出现最多次数的值,如果存在相同的数量则输出较大的值。1)使用count记录每个值出现的次数。遍历完成后,输出maxnum。过程描述:在遍历数组过程中。
2024-09-13 21:51:13
637
1
原创 leetcode438.找到字符串中所有字母异位词、leetcode3.无重复字符的最长子串、leetcode76.最小覆盖子串、leetcode.567字符串的排列/华为OD机试最左侧冗余覆盖子串
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。示例 2:输入: s = “abab”, p = “ab”
2024-09-13 16:12:21
1392
原创 leetcode3.无重复字符的最长子串
请注意,你的答案必须是子串的长度,“pwke” 是一个子序列,不是子串。给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”s 由英文字母、数字、符号和空格组成。输入: s = “pwwkew”输入: s = “bbbbb”
2024-09-11 15:41:33
573
原创 面试题01.06字符串压缩
利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。字符串长度在[0, 50000]范围内。输入:“aabcccccaaa”输出:“a2b1c5a3”输入:“abbccd”输出:“abbccd”
2024-09-10 23:31:32
220
原创 leetcode128.最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入:nums = [100,4,200,1,3,2]
2024-09-09 18:43:15
432
原创 leetcode1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。你可以按任意顺序返回答案。
2024-09-09 16:30:33
592
原创 华为OD(C卷,100分)- 输出指定字母在字符串的中的索引
给定一个字符串,把字符串按照大写在前小写在后排序,输出排好后的第 K 个字母在原来字符串的索引。相同字母输出第一个出现的位置。
2024-09-02 01:00:00
652
原创 华为OD机试(C卷,100分)- 单词接龙
单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。现给定一组全部由小写字母组成单词数组,并指定其中的一个单词作为起始单词,进行单词接龙,请输出最长的单词串,单词串是单词拼接而成,中间没有空格。
2024-09-01 23:05:53
804
原创 (C卷,100分)- 最长子字符串的长度(一)、leetcode1371.每个元音包含偶数次的最长子字符串、最长子字符串的长度(二)
给你一个字符串 s,首尾相连成一个环形,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。
2024-09-01 23:00:18
1010
原创 华为OD机试(C卷,100分)- API集群负载统计
某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。RESTful API是由多个层级构成,层级之间使用 / 连接,如 /A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。接下来N行,每一行为一个RESTful API的URL地址,约束地址中仅包含英文字母和连接符 / ,最大层级为10,每层级字符串最大长度为10。
2024-09-01 02:45:00
521
原创 华为OD机试(E卷,100分)- 字符串分割(二)
给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
2024-09-01 00:17:58
599
原创 华为OD机试(C卷,100分)- 字符串排序
排序规则:单词中字母比较不区分大小写,两个单词先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依此类推,如果到某个字母不相同,字母顺序在前的那个单词顺序在前。当一个短单词和一个长单词的开头部分都相同(即短单词是长单词从首字母开始的一部分),短单词顺序在前。字母大小写不同的相同单词,只输出一次。
2024-09-01 00:13:47
798
原创 华为OD(C卷,200分)- 抢7游戏
提示,根据dpB[m-1] = dpA[m] + dpA[m+1]的递推式,我们可以了解到dpA,dpB数组的长度应该初始化为m+2,这样上面递推式才不会越界。初始时,是A从m开始叫,因此 dpA[m] = 1,即A叫到数字m的方案数为1。之后我们可以递推出dpB[m-1],即B叫出数字m-1的方案数,即dpB[m-1] = dpA[m] + dp[m+1]dpA[m-1] = dpB[m] + dpB[m+1],而dpB[m]和dpB[m+1]都应该初始化为0。B叫了数字 i 的方案数有多少种呢?
2024-08-31 12:45:00
595
原创 华为OD机试(C卷,200分)- Wonderland
而第 i-2 天之前,即:第0天~第i-3天的花费是dp[i-3],此时需要注意 i - 3 可能为负数,如果为负数,则表示第 i-2 天之前没有花费,即为0。我们可以认为在第 i - 2 天购买了"三日票",其有效期覆盖第 i-2 天,第i-1天,第i天,这段时间的花费是 costs[1]如果第 i 天不是游玩日,即第 i 天不需要考虑花钱买票,那么:dp[i] = dp[i-1]定义一个dp数组,dp[i] 的含义是:前 i 天,完成所有游玩日的最少花费金额。小王计划地游玩日期将由一个数组给出。
2024-08-31 07:00:00
1101
原创 华为OD(C卷,200分)- 两个字符串间的最短路径问题
另外需要注意的是,上面推导式dp[i-1][j-1]参与比较是有前提条件的,即如果(i-1, j-1)点和(i,j)点之间存在斜线相连时,才能将dp[i-1][j-1]带入上面推导式,否则不能带入。例如 A字符串为 “ABCABBA”,B字符串为 “CBABAC” 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。如果(i-1, j-1)和(i,j)之间存在斜线相连,则dp[i][j] = dp[i-1][j-1] + 1。
2024-08-30 15:51:40
1395
原创 华为OD机试(C卷,200分)- 园区参观路径
因此,更优解法是利用动态规划,我们可以定义一个dp二维数组,dp[i][j]的含义是:从坐标(0,0)到达坐标(i, j)的路径数。需要注意的是,dp[0][0] 初始化时,需要注意(0,0)坐标位置是否可以参观,如果不可以参观,则道道(0,0)的路径为0条,否则为1条。如果到达(i-1,j)的路径有dp[i-1][j]条,那么到达(i,j)的路径也有dp[i-1][j]条。同理到达(i, j-1)的路径有dp[i][j-1],那么到达(i,j)的路径也有dp[i][j-1]条。第一行为园区的长和宽;
2024-08-30 15:22:14
738
原创 leetcode60.不同路径
这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
2024-08-29 21:21:41
866
原创 华为OD机试E卷-通过软盘拷贝文件[200分]
文件占用的软盘空间都是按块分配的,每个块大小为512个字节。有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外,没有任何手段可以将文件持贝出来,而且只有一张软盘可以使用,因此这一张软盘是唯一可以用来拷贝文件的载体。第2行到第N+1行(共N行),每行为一个整数,表示每个文件的大小 s,单位为字节.0 < i < N,0< s[i]< 1000000。小于存储当前物品所需的块数,则最大价值就是前一行的值(函数是解决问题的主要函数,它接受物品价值数组(
2024-08-29 14:00:41
1251
原创 华为OD机试E卷-充电设备
我们取这两种选择中的最大值,即 fmax(dp[i-1][j], dp[i-1][j-output[i]]+output[i])。dp[i][j] 表示前 i 个充电设备,总功率不超过 j 的最大输出功率。这是因为如果只有一个充电设备,且总功率不超过它的输出功率,那么最大输出功率就是它自己的输出功率。当充电设备输出功率50、20、20组合时,其输出功率总和为90,最接近充电站最大充电输出功率,因此最优元素为90。,那么最大输出功率就是不选择当前充电设备时的最大输出功率,即 dp[i-1][j]。
2024-08-28 20:00:58
779
原创 0-1背包问题
放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);那么可以有两个方向推出来dp[i][j],
2024-08-20 21:00:24
625
原创 leetcode70.爬楼梯
我们是从第 0 级开始爬的,所以从第 0 级爬到第 0 级我们可以看作只有一种方案,即 f(0)=1;我们不妨写几项来验证一下,根据转移方程得到 f(2)=2,f(3)=3,f(4)=5,……它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。3. 1 阶 + 1 阶 + 1 阶。
2024-08-19 23:44:37
304
原创 华为OD机试(C卷,100分)- 游戏分组
它的时间复杂度和空间复杂度都与输入数组的大小有关,但由于数组大小固定为 10,所以算法的复杂度是可以接受的。例:10 名参赛者的评分分别为:5 1 8 3 4 6 7 10 9 2,分组为(1 3 5 8 10)和(2 4 6 7 9),两组实力差最小,差值为1。现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。10个整数,表示10名参与者的游戏水平评分。范围在 [1, 10000] 之间。函数是一个深度优先搜索的实现,它用于找出所有可能的 5 个数字的组合和。
2024-08-19 15:10:40
743
原创 leetcode509.斐波那契数
由于 F(n) 只和 F(n−1) 与 F(n−2) 有关,因此可以使用「滚动数组思想」把空间复杂度优化成 O(1)。斐波那契数的边界条件是 F(0)=0 和 F(1)=1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。解释:F(2) = F(1) + F(0) = 1 + 0 = 1。解释:F(3) = F(2) + F(1) = 1 + 1 = 2。解释:F(4) = F(3) + F(2) = 2 + 1 = 3。给定 n ,请计算 F(n)。
2024-08-18 01:50:02
394
原创 华为OD机试(C卷,200分)- 计算疫情扩散时间
在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。感染区域每天都会把周围(上下左右)的4个区域感染。请根据给定的地图计算,多少天以后,全部区域都会被感染。如果初始地图上所有区域全部都被感染,或者没有被感染区域,返回-1。
2024-08-13 23:43:20
963
原创 leetcode695.岛屿的最大面积
输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]我们找到一个单元格后,即找到一个岛屿。
2024-08-13 23:11:39
491
原创 leetcode695.岛屿最大面积、华为OD机试(C卷,200分)- 可以组成网络的服务器
就再去其上下左右找下一个服务器,当找到新服务器,再递归去找其上下左右,按此逻辑,就像拔地瓜藤一样,一下子把所有地瓜都拔出来。在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。用ans统计每个局域网包含的服务器个数,每找到一个局域网包含的服务器个数大于当前局域网,则更新ans。说明 [0][0]、[1][0]、[1][1]三台服务器相互连接,可以组成局域网。不同之处在于统计的是最大局域网包含的服务器个数,而不是所有局域网个数。最大局域网包含的服务器个数。
2024-08-03 23:25:38
468
原创 leetcode200.岛屿数量(C语言)
为了求出岛屿的数量,我们可以扫描整个二维网格。在深度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。我们可以将二维网格看成一个无向图,竖直或水平相邻的 1 之间有边相连。grid[i][j] 的值为 ‘0’ 或 ‘1’最终岛屿的数量就是我们进行深度优先搜索的次数。此外,你可以假设该网格的四条边均被水包围。输入:grid = [
2024-08-03 22:56:03
329
原创 leetcode150.逆波兰表达式求值
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。输入:tokens = [“4”,“13”,“5”,“/”,“+”]输入:tokens = [“2”,“1”,“+”,“3”,“*”]有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’。
2024-08-02 22:12:56
363
原创 华为od机试(C卷,100分)-找朋友、 转盘寿司
在学校中,N 个小朋友站成一队, 第 i 个小朋友的身高为height[i],第 i 个小朋友可以看到的第一个比自己身高更高的小朋友 j ,那么 j 是 i 的好朋友(要求j > i)。请输出一个数组,对应位置的输出是每个小朋友的好朋友位置,如果没有看到好朋友,则输出0。
2024-08-02 00:02:03
632
原创 leetcode1047.删除字符串所有相邻重复项、华为OD机试(C卷,100分)- 消消乐游戏、密码输入检测
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。
2024-08-01 23:35:14
1165
原创 leetcode1614.括号的最大嵌套深度、华为OD机试(C卷,100分)- 最大括号深度
给定 有效括号字符串 s,返回 s 的 嵌套深度。嵌套深度是嵌套括号的 最大 数量。示例 1:输入:s = “(1+(2*3)+((8)/4))+1”输出:3解释:数字 8 在嵌套的 3 层括号中。示例 2:输入:s = “(1)+((2))+(((3)))”输出:3解释:数字 3 在嵌套的 3 层括号中。示例 3:输入:s = “()(())((()()))”输出:3。
2024-08-01 18:45:49
554
原创 leetcode232.用栈实现队列
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。2、出队:出栈为空入栈不空,则将入栈所有元素弹出到出栈中,出栈中栈顶元素为队头元素。再将出栈中所有元素加入入栈,以便下次使用。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。否则,返回 false。假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)4、队空:入栈为空出栈也为空。
2024-07-31 22:38:43
459
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人