剑指offer67题-No56.删除链表中的重复节点
用哈希的方法比较简单,想想直接遍历的方法。 遍历链表,每次比较相邻两个节点,如果遇到了两个相邻节点相同,则新开内循环将这一段所有的相同都遍历过去。 在这一连串相同的节点前的节点,直接连上后续第一个不相同值的节点。 class Solution { public: ListNode* deleteDuplication(ListNode* pHead…
2025-6-06 16:52
|
|
2025-6-06 16:52
剑指offer67题-No55.链表中的入口节点
双指针算法 快慢指针,指针相遇的时候就是入口。证明如下: 设快指针的速度是慢指针的两倍,环之前有m个节点,环内有c个节点。当慢指针走了a步且两指针相遇时,快指针显然走了a+nc步(n表示快指针的绕环周期)。 再由先前的速度定义,有:2a = a+nc,即a = nc,说明慢指针此时,刚好走了n个环周期,只需要再走m步,就可以到达入口点了。再重置一个…
2025-6-06 16:51
|
|
2025-6-06 16:51
剑指offer67题-No53.表示数值的字符串
字符串处理 leetcode上精简的题解方法。 .出现正确情况:只出现一次,且在e的前面 e出现正确情况:只出现一次,且出现前有数字 +和-出现正确情况:只能在开头和e后一位 class Solution { public: bool isDigital(char x){ return x >= '0' && x <= '9'…
2025-6-05 14:03
|
|
2025-6-05 14:03
剑指offer67题-No52.正则表达式匹配
字符串处理 没想到是动态规划题,感觉特别难 LCR 137. 模糊搜索验证 - 力扣(LeetCode) 法1:DP 用f[i][j]表示s的前i个字符与p的前j个字符是否能匹配。考虑情况: p的第j个字符是小写字符:f[i][j] = f[i-1][j-1] (if s[i] = p[j])f[i][j] = false (if s[i] ≠ p…
2025-6-05 13:55
|
|
2025-6-05 14:02
剑指offer67题-No51.构建乘积数组
法1:暴力 时间复杂度为On^2 vector<int> multiply(vector<int>& A) { // write code here vector<int> res; int len = A.size(); for(int i = 0; i < len; ++i){ int b = 1; for(in…
2025-6-05 13:53
|
|
2025-6-05 13:53
剑指offer67题-No50.数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 法1:哈希表,时间复杂度On,空间复杂度On bool duplicate(int numbers[], int length, int* duplication…
2025-6-05 13:51
|
|
2025-6-05 13:52
剑指offer67题-No49.字符串转化为整数
模拟题,感觉挺复杂的 class Solution { public: int myAtoi(string str) { int len = str.size(); int i = 0, flag = 1; long long base = 0; // 跳过前导空格 while (i < len && str[i] == ' …
2025-6-05 13:50
|
|
2025-6-05 13:52
剑指offer67题-No48.求两个数相加
一般都是位运算,记住怎么用位运算求+吧。 可以参考:【每日算法Day 66】经典面试题:不用四则运算如何做加法? - 知乎 1)两个数做^运算,得到各位相加不进位的计算结果 2)两个数做&运算,得到进位。因为进位是要加到左一位的,所以需要左移1 3)循环操作,直到进位为0 int Add(int num1, int num2) { // 最…
2025-6-05 13:49
|
|
2025-6-05 13:49