- 博客(8)
- 资源 (2)
- 收藏
- 关注
原创 赎金信(hash)
用数组的索引表示字符: 由于 26 个小写英文字母的 ASCII 码是连续的, 所以就可以创建一个长度为 26 的整型数组, 用数组的索引来表示英文字母. 任意一个字母 char 在数组中的索引就可以用 char - 'a' 表示. 字母 a 就是 'a' - 'a', 就是 0 下标, 以此类推.通过上面对题目的分析, 这个题就可以采用 hash 表的思想, 就是先把。字符串, 每遍历到一个字母, 就将 hash 数组中该字母的。中用过一次了, 如果减完后, hash 数组中该字母的。
2023-11-20 16:40:32
63
1
原创 判断子序列
可以设置两个指针 ps, pt , 分别遍历两个字符串, 当 pt 指向的字符与 ps 相同时, 将 ps++, pt++;不相同时, 继续在字符串 t 中寻找是否有与 s 中相同的字符, 所以只有 pt++. 直到遍历完两个字符串中的任意一个.概括一下, 这个题就是判断字符串 t 中是否包含 字符串 s 中的所有字符, 且字符出现的先后顺序和 s 中相同.字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。时间复杂度: O(m+n)空间复杂度: O(1)
2023-11-18 20:32:44
72
1
原创 验证回文串
在这种情况下判断回文, 就可以设两个指针 left,right,分别指向字符串的最左边字符,和最右边字符。当判断到 left 和 right 指向的字符相等时,将 left 右移,right 左移,继续判断两个字符是否相等。在跳过无效字符过后,对两个字符进行相等判断之前,也需要判断 left < right,因为在跳跃之后,可能会出现 left == right 的情况,那此时指向的是同一个字符,无需判断。,就只用基于不含无效字符的解法上加一步,那就是判断是否是无效字符,如果是无效字符,那直接跳过即可。
2023-11-17 20:43:09
124
原创 买卖股票的最佳时机
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。遍历数组的时候,如果当前票价比最低价小,更新最低价;如果当前票价- 最低价的利润大于最大利润,更新最大利润。同时,你不能在买入前卖出股票。简单来说,这个题的本质,就是找到数组中的最大差值,不过这个差值只能是数组后面的减去前面的数的差值。用变量 minPrice 记录股票价格的最低价,用 ret 记录最终的结果,即最大利润。利用两层循环,将数组中所有两个数的组合都枚举出来,得出最大值。
2023-11-16 20:07:05
73
1
原创 合并两个有序数组
给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。
2023-11-11 12:21:37
356
1
原创 随机链表的复制
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。使用Map的数据结构,key存储原链表各个节点的地址,value用来存储新链表各个节点的地址。
2023-11-08 15:39:04
100
1
原创 移动零(简单)
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。题目解析 | 算法原理 | 复杂度分析 | 代码
2023-11-03 13:11:02
176
原创 彻底弄懂C语言字符串的两种初始赋值的区别
但对于{}的字符串形式,就会出现如下图所示情况,原因是该形式的字符串并没有设定结束标志,而空间内存是连续的,在打印完六个字符后,并没有遇到'\0',就会持续打印输出后面内存里的东西,直到遇到'\0'才会停止,就出现了打印输出情况与想象不符的情况。在打印时,由于字符串的结束标志是'\0',所以使用"%s"格式打印输出字符串时,遇到'\0'就会停止打印输出。因为'\0'是字符串的结束标志,所以'\0'在哪,字符串就会停止在那,这个特点可以应用于字符串的截取。,因为'\0'也是一个字符。编译器会自动在末尾加上。
2023-03-01 11:33:35
543
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人