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

APL求最小缺失正整数的代码优化与正确性验证问询

寻找数组中最小缺失正整数的APL实现优化

背景

设ns为任意长度、元素唯一的未排序整数数组,需返回该数组中最小的缺失正整数。示例如下:

ns = {-1, -3, -2} -> 1
ns = {1, 2, 3, 4, 5, 6, 7, 8, 9} -> 10
ns = {-1, 5, 1} -> 2

我在APL相关YouTube视频中看到该问题后尝试自行实现,我的解决方案为:

smallestMissingPositive ← {⌊/(⍳⌈/⍪(1∘+)⌈/⍵)~⍵}

代码解释:

  • ⍳⌈/⍪(1∘+)⌈/⍵用于生成从1到N+1的所有正整数,其中N是⍵中的最大值。通过拼接操作将⍳⌈/⍵(⍵最大值以内的正整数列表)与(1∘+)⌈/⍵(⍵最大值加1)合并。
  • ~⍵用于计算上述生成列表与原数组的差集。
  • ⌊/用于取差集中的最小值。

例如,对于ns = {-1, 1, 3, -2, 5},先生成{1, 2, 3, 4, 5, 6},再计算其与ns的差集{2, 4, 6},最后取最小值得到2。

问题

能否进一步优化我的这个解决方案?

疑问

  • 我不确定自己的解决方案是否正确(即是否存在遗漏的边界情况);
  • 在⍳⌈/⍪(1∘+)⌈/⍵中,max-reduce函数⌈/被调用了两次。此处模式为(h (f ⍵)) g (h' (f ⍵)),能否消除f的冗余计算?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:13:25