边界情况处理套路总结
套路1:数组/字符串为空或null
// 返回类型根据题目要求选择 if (nums == null || nums.length == 0) { return 0; // int类型 return ""; // String类型 return new ArrayList<>(); // List类型 return new int[0]; // 数组类型 }套路2:长度为1的特殊情况
if (nums.length == 1) { return nums[0]; // 直接返回唯一元素 }套路3:长度不够的情况
// 滑动窗口:至少需要k个元素 if (nums.length < k) { return new int[0]; } // 三数之和:至少需要3个数 if (nums.length < 3) { return new ArrayList<>(); }套路4:初始化时处理边界
// 找最大值/最小值:初始化为第一个元素 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)
- 找不到结果:根据题目要求返回默认值
实际应用示例
// 最大子数组和 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]; } // ... }