今天正式开启刷题之旅,目标很简单:持续 + 深度 + 总结
第一天选择了两道经典入门题:Two SumAdd Two Numbers,属于哈希表 + 链表的基础题型。


🧠 LeetCode 1 – Two Sum(两数之和)

💡 思路总结

这题的核心就是:
👉 用空间换时间(哈希表)

  • 遍历数组
  • 对每个数 nums[i]
  • 查找 target - nums[i] 是否已经存在
  • 如果存在,直接返回索引

⚡ 关键点

  • unordered_map 用来存储「值 → 下标」
  • 查找时间复杂度 O(1)
  • 总体时间复杂度 O(n)

💻 代码实现

#include <unordered_map>

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int ,int > map_list;
        for(int i = 0;i<nums.size();i++){
            int temp = target - nums[i];
            if(map_list.count(temp))return {map_list[temp],i};
            map_list[nums[i]] = i;
        }
        return {};
    }
};

📌 知识点总结

  • 哈希表(unordered_map)核心用途:
    • 快速查找
    • 去重 / 记录状态
  • 常见套路:
    • “找另一半” → target - x
  • 面试高频模型:
    👉 一边遍历,一边查找

🔗 LeetCode 2 – Add Two Numbers(两数相加)

💡 思路总结

这是一个典型的链表模拟 + 进位问题

  • 模拟“竖式加法”
  • 两个链表逐位相加
  • 需要处理:
    • 不同长度
    • 进位(carry)

⚡ 关键点

  • dummy 头节点简化操作(非常重要!)
  • 循环条件:l1 || l2 || carry
  • 每一位:sum = x + y + carry

💻 代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
    //链表没节点就按 0,进位没处理完就不能停
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* cur_l1 = l1;
        ListNode* cur_l2 = l2;

        ListNode* dummy = new ListNode(0);
        ListNode* result = dummy;

        int flag = 0;

        while (cur_l1 != NULL || cur_l2 != NULL || flag != 0) {
            int x = (cur_l1 != NULL) ? cur_l1->val : 0;
            int y = (cur_l2 != NULL) ? cur_l2->val : 0;

            int sum = x + y + flag;
            flag = sum / 10;

            result->next = new ListNode(sum % 10);
            result = result->next;

            if (cur_l1 != NULL) cur_l1 = cur_l1->next;
            if (cur_l2 != NULL) cur_l2 = cur_l2->next;
        }

        return dummy->next;
    }
};

📌 知识点总结

  • 链表经典技巧:
    • dummy head(虚拟头节点)
  • 进位处理:
    • carry = sum / 10
  • 边界条件:
    • 空节点当 0 处理
    • 最后一个进位不能丢

🧩 今日总结

今天的两道题虽然是入门题,但含金量很高:

题目核心能力
Two Sum哈希表 + 一次遍历
Add Two Numbers链表 + 模拟 + 边界处理

👉 本质其实是在训练:

  • 数据结构的选择能力
  • 边界条件处理能力
  • 代码结构清晰度

💬 写给自己的话

第一天,正式起步。

你已经迈出了最关键的一步——开始行动

别小看这些“简单题”,真正的高手不是不会难题,而是:

把简单题做到极致,形成肌肉记忆。

接下来要做的不是“刷很多”,而是:

  • 每一题都理解透
  • 总结套路
  • 形成自己的题感

🚀 坚持下去,你会越来越强。

—— 阿玉的刷题之路 Day 1