目录

  1. 题目1:两数之和(Two Sum)
  2. 题目2:反转字符串
  3. 题目3:斐波那契数列
  4. 题目4:判断回文数
  5. 题目5:合并两个有序数组
  6. 总结与学习建议

1️⃣ 两数之和(LeetCode 1)

题目描述
给定一个整数数组 nums 和一个目标值 target,找出数组中和为 target 的两个数,返回它们的索引。

思路

  • 暴力法:双重循环遍历,时间复杂度O(n²)
  • 哈希表法:边遍历边查找 complement,时间复杂度O(n)

示例代码(Java)

public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[]{map.get(complement), i};
        }
        map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
}

2️⃣ 反转字符串

题目描述
编写一个函数,将输入的字符串反转。

思路

  • 双指针交换法,从两端往中间交换字符。

示例代码(Java)

public String reverseString(String s) {
    char[] chars = s.toCharArray();
    int left = 0, right = chars.length - 1;
    while (left < right) {
        char temp = chars[left];
        chars[left++] = chars[right];
        chars[right--] = temp;
    }
    return new String(chars);
}

3️⃣ 斐波那契数列

题目描述
求第 n 个斐波那契数,fib(0)=0, fib(1)=1。

思路

  • 递归法(容易重复计算,效率低)
  • 动态规划/迭代法,时间复杂度O(n)

示例代码(Java)

public int fib(int n) {
    if (n < 2) return n;
    int a = 0, b = 1;
    for (int i = 2; i <= n; i++) {
        int temp = a + b;
        a = b;
        b = temp;
    }
    return b;
}

4️⃣ 判断回文数

题目描述
判断一个整数是否是回文数(正读和反读都相同)。

思路

  • 转字符串判断
  • 反转数字部分比较

示例代码(Java)

public boolean isPalindrome(int x) {
    if (x < 0) return false;
    int reversed = 0, original = x;
    while (x != 0) {
        int pop = x % 10;
        x /= 10;
        reversed = reversed * 10 + pop;
    }
    return original == reversed;
}

5️⃣ 合并两个有序数组

题目描述
将两个有序数组合并为一个有序数组,要求就地合并。

思路

  • 从后往前合并,避免覆盖。

示例代码(Java)

public void merge(int[] nums1, int m, int[] nums2, int n) {
    int i = m - 1, j = n - 1, k = m + n - 1;
    while (i >= 0 && j >= 0) {
        if (nums1[i] > nums2[j]) {
            nums1[k--] = nums1[i--];
        } else {
            nums1[k--] = nums2[j--];
        }
    }
    while (j >= 0) {
        nums1[k--] = nums2[j--];
    }
}

总结与学习建议

  • 这些题目是算法入门的基础,掌握后能为复杂问题打下坚实基础。
  • 多刷题,多写代码,理解背后的思路比盲目背诵更重要。
  • 结合图解和手写代码,加深理解。
  • 逐步挑战中等难度题,提升算法水平。