算法边界情况处理套路总结

边界情况处理套路总结

套路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

检查清单

做题时按这个顺序检查:

  1. null 检查:if (nums == null)
  2. 空数组/空字符串:if (nums.length == 0)
  3. 长度为1:if (nums.length == 1)
  4. 长度不够:if (nums.length < requiredLength)
  5. 参数有效性:if (k <= 0 || k > nums.length)
  6. 找不到结果:根据题目要求返回默认值

实际应用示例

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];
    }
    // ...
}
相关推荐
烛衔溟2 小时前
C语言图论:最短路径算法
c语言·算法·图论·dijkstra·bellman-ford·最短路径
烛衔溟2 小时前
C语言图论:最小生成树算法
c语言·算法·图论·最小生成树·kruskal·prim
Yzzz-F2 小时前
算法竞赛进阶指南 进阶搜索
算法·深度优先
weixin_437546332 小时前
注释文件夹下脚本的Debug
java·linux·算法
月明长歌3 小时前
【码道初阶】【LeetCode 572】另一棵树的子树:当“递归”遇上“递归”
算法·leetcode·职场和发展
月明长歌3 小时前
【码道初阶】【LeetCode 150】逆波兰表达式求值:为什么栈是它的最佳拍档?
java·数据结构·算法·leetcode·后缀表达式
C雨后彩虹3 小时前
最大数字问题
java·数据结构·算法·华为·面试
java修仙传3 小时前
力扣hot100:搜索二维矩阵
算法·leetcode·矩阵
浅川.253 小时前
xtuoj 字符串计数
算法