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

寻找数组所有子序列按位OR结果中缺失的最小整数(优化解法)

子序列按位OR结果中缺失的最小整数优化解法

问题背景

给定数组(如arr = {1,3,4,0}),需找出所有子序列按位OR结果去重后集合中缺失的最小整数。直接生成所有子序列显然不可行(数组长度可达105,子序列数量为210^5),必须用基于按位OR性质的优化方法。

核心思路

按位OR运算有一个关键性质:新元素加入后,新增的OR结果只能是原有结果与新元素的OR,或新元素本身。且由于元素最大值为10^5(二进制约17位),每一步维护的OR结果集合大小最多为17,时间复杂度可控制在O(n*logM)(n为数组长度,M为元素最大值),完全适配大规模数组。

具体步骤

  1. 维护OR结果集合:初始化集合包含空序列的OR结果0,遍历数组中每个元素:
    • 临时生成新集合,包含当前元素,以及现有集合中所有元素与当前元素的OR结果
    • 将临时集合合并到主集合中去重
  2. 查找缺失的最小整数:从0开始依次检查,第一个不在OR结果集合中的数即为答案。

代码实现(Python)

def find_missing_min(arr):
    or_results = {0}
    for num in arr:
        # 生成当前元素带来的新OR结果
        new_ors = {val | num for val in or_results}
        new_ors.add(num)
        # 合并到结果集合
        or_results.update(new_ors)
    # 寻找缺失的最小整数
    res = 0
    while res in or_results:
        res += 1
    return res

# 测试示例
arr = [1, 3, 4, 0]
print(find_missing_min(arr))  # 输出2

复杂度说明

  • 时间复杂度:O(n*logM),n为数组长度,logM是元素最大值的二进制位数(约17),105规模的数组总操作仅约1.7×106次,效率极高
  • 空间复杂度:O(logM),维护的OR结果集合大小最多为二进制位数,占用极小内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:54:25