目录
- 题目1:两数之和(Two Sum)
- 题目2:反转字符串
- 题目3:斐波那契数列
- 题目4:判断回文数
- 题目5:合并两个有序数组
- 总结与学习建议
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--];
}
}
总结与学习建议
- 这些题目是算法入门的基础,掌握后能为复杂问题打下坚实基础。
- 多刷题,多写代码,理解背后的思路比盲目背诵更重要。
- 结合图解和手写代码,加深理解。
- 逐步挑战中等难度题,提升算法水平。
发表回复