边界情况处理套路总结
套路1:数组/字符串为空或null
java
// 返回类型根据题目要求选择
if (nums == null || nums.length == 0) {
return 0; // int类型
return ""; // String类型
return new ArrayList<>(); // List类型
return new int[0]; // 数组类型
}
套路2:长度为1的特殊情况
java
if (nums.length == 1) {
return nums[0]; // 直接返回唯一元素
}
套路3:长度不够的情况
java
// 滑动窗口:至少需要k个元素
if (nums.length < k) {
return new int[0];
}
// 三数之和:至少需要3个数
if (nums.length < 3) {
return new ArrayList<>();
}
套路4:初始化时处理边界
java
// 找最大值/最小值:初始化为第一个元素
if (nums == null || nums.length == 0) {
return 0; // 或根据题目要求
}
int max = nums[0]; // 先判断非空,再初始化
常见返回值对照表
| 返回类型 | 找不到/为空时的返回值 |
|---|---|
| int | 0 或 -1(根据题目) |
| String | "" |
| List<Integer> | new ArrayList<>() |
| int[] | new int[0] |
| boolean | false |
检查清单
做题时按这个顺序检查:
- null 检查:if (nums == null)
- 空数组/空字符串:if (nums.length == 0)
- 长度为1:if (nums.length == 1)
- 长度不够:if (nums.length < requiredLength)
- 参数有效性:if (k <= 0 || k > nums.length)
- 找不到结果:根据题目要求返回默认值
实际应用示例
java
// 最大子数组和
public int maxSubArray(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int max = nums[0]; // 初始化为第一个元素
// ...
}
// 三数之和
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null || nums.length < 3) return result;
// ...
}
// 滑动窗口
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums == null || nums.length == 0 || k <= 0 || k > nums.length) {
return new int[0];
}
// ...
}