快乐数——用 Floyd 判环算法把一道数学题变成链表题

快乐数的本质是判环问题。从「为什么一定成环」到「为什么快慢指针一定相遇」,把 Floyd 算法的直觉讲清楚。

March 12, 2026 · KahanaT800

代码随想录打卡第6天 | 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

242. 有效的字母异位词 链接:力扣242 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 这道题要判断两个字符串包含的字符是否完全一致,第一想法就是哈希表; 仔细思考就会发现因为只有26个字符,所以不需要使用完整的哈希表,只需要使用一个定长数组模拟哈希就行了; 看完题解后的想法 —— 实现中遇到的困难 最开始的时候将 s 的写入和判断的 t 的减少分开在了两个循环中,其实一次循环就能做; 代码 class Solution { public: bool isAnagram(string s, string t) { if (s.size() != t.size()) { return false; } int cnt[26] = {}; for (int i = 0; i < s.size(); i++) { cnt[s[i] - 'a']++; cnt[t[i] - 'a']--; } for (int c : cnt) { if (c != 0) { return false; } } return true; } }; 349. 两个数组的交集 链接:力扣349 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 使用集合去重+记录出现元素,之后再用集合去重; ...

March 9, 2026 · KahanaT800

代码随想录打卡第4天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、面试题02.07. 链表相交、142. 环形链表II

24. 两两交换链表中的节点 链接:力扣24 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 两两交换,头节点也要进入交换,要把这种特殊情况转变为一般情况,所以需要引入dummyHead; 让之后的交换都是某个节点的next和next->next;变成了一般性问题; 还有就是三指针的交换顺序,这里采用标记了最后需要指向的节点降低心智负担; 看完题解后的想法 —— 实现中遇到的困难 dummy.next忘记指向head了; 代码 class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode dummy(0); dummy.next = head; ListNode* cur = &dummy; while (cur->next != nullptr && cur->next->next != nullptr) { ListNode* finalFoward = cur->next->next->next; ListNode* firstMove = cur->next->next; ListNode* secondMove = cur->next; cur->next = firstMove; firstMove->next = secondMove; secondMove->next = finalFoward; cur = cur->next->next; } return dummy.next; } }; 19. 删除链表的倒数第N个节点 链接:力扣19 文章:代码随想录 视频:B站讲解 状态:⚠️ 第一想法 第一想法是反转链表,然后从头找过去,然后删除节点再返回来; ...

March 7, 2026 · KahanaT800