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

边界情况处理套路总结

套路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 int0
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];
    }
    // ...
}
相关推荐
飞Link1 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
一去不复返的通信er3 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
Shaoshing4 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily4 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库5 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
moshuying6 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王7 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构
INGNIGHT7 小时前
91 · 最小调整代价(序列dp)
数据结构·算法·leetcode
moshuying7 小时前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法