You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写函数:寻找未排序数组中缺失的最小正整数

找出列表中不存在的最小正整数(KDB/Q实现)

需求说明

给定包含正负整数的列表,找出其中缺失的最小正整数,示例如下:

  • 输入 2 9 -10 5 3 1 11 -1 7 → 输出 4
  • 输入 -10 4 -4 2 15 13 6 8 -1 → 输出 1
  • 输入 1 1 0 18 1 -12 -6 18 21 → 输出 2

完整实现函数

基于你已有的正整数筛选逻辑,补充后续连续值判断逻辑,最终函数如下:

minMissingPositive:{
    // 筛选正整数、去重并排序
    pos:asc distinct where[;x>0]x;
    // 无正整数时直接返回1
    if[0=count pos; :1];
    // 对比排序后的正整数与从1开始的连续序列,找到第一个不匹配的位置
    diff:where pos <> 1+til count pos;
    // 根据对比结果返回缺失值:无缺失则返回序列长度+1,否则返回第一个缺失的数
    $[0=count diff; count pos +1; 1+first diff]
}

测试验证

将示例输入代入函数验证结果:

q)list: 2 9 -10 5 3 1 11 -1 7
q)minMissingPositive list
4

q)list2: -10 4 -4 2 15 13 6 8 -1
q)minMissingPositive list2
1

q)list3: 1 1 0 18 1 -12 -6 18 21
q)minMissingPositive list3
2

逻辑拆解

  1. 正整数筛选与预处理:asc distinct where[;x>0]x 先过滤掉非正整数,去重后排序,避免重复元素干扰连续值判断
  2. 边界情况处理:如果列表中没有任何正整数,最小缺失正整数必然是1(如示例list2)
  3. 连续值对比:生成从1开始的连续整数序列(长度与筛选后的正整数列表一致),和排序后的正整数列表逐位比对,找到第一个不匹配的位置
  4. 结果判定:若所有位置都匹配(说明1到count pos的正整数都存在),则返回count pos +1;否则返回第一个不匹配位置对应的连续数,即缺失的最小正整数

内容的提问来源于stack exchange,提问作者Rajasekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:08:12