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

基于(min,max)与scalar计算异或最值的O(1)优化方案咨询

求[min, max]中x与scalar异或的最大/最小值(O(1)解法)

核心思路

异或操作的特性是:二进制位不同则结果为1,相同则为0。要最大化x^scalar,需让结果的二进制高位尽可能多为1;要最小化则需让高位尽可能多为0。我们通过逐位确定结果的每一位,利用位掩码判断区间内是否存在符合条件的x,全程仅需遍历固定位数(如32位/64位),时间复杂度为O(1)。


最大值求解步骤

  1. 初始化max_result为0,从最高位(如32位整数的第31位)到第0位依次遍历每一位i:
    • 尝试将当前位设为1,得到候选结果candidate = max_result | (1 << i)
    • 计算掩码mask = ~((1 << (i+1)) - 1),用于保留当前位以上的高位部分
    • 确定x的当前位要求:要让x^scalar的第i位为1,x的第i位必须与scalar的第i位相反,即x_bit = 1 ^ ((scalar >> i) & 1)
    • 构造x的前缀:prefix = ((max_result ^ scalar) & mask) | (x_bit << i),该前缀固定了x的高位和当前位,低位可自由取值
    • 判断前缀对应的区间[prefix, prefix | ((1 << i) - 1)]是否与[min, max]有交集:若prefix <= max且(prefix | ((1 << i) - 1)) >= min,说明存在符合条件的x,将max_result更新为candidate
  2. 遍历完成后,max_result即为x^scalar的最大值

最小值求解步骤

  1. 初始化min_result为0,从最高位到第0位依次遍历每一位i:
    • 尝试将当前位设为0,候选结果candidate = min_result
    • 计算掩码mask = ~((1 << (i+1)) - 1)
    • 确定x的当前位要求:要让x^scalar的第i位为0,x的第i位必须与scalar的第i位相同,即x_bit = ((scalar >> i) & 1)
    • 构造x的前缀:prefix = ((min_result ^ scalar) & mask) | (x_bit << i)
    • 判断前缀对应的区间[prefix, prefix | ((1 << i) - 1)]是否与[min, max]有交集:若存在交集,保留min_result为candidate;否则,将当前位设为1,min_result |= (1 << i)
  2. 遍历完成后,min_result即为x^scalar的最小值

示例验证(min=10, max=20, scalar=50)

  • 最大值求解到最后一位时,构造的prefix=13(13在[10,20]区间内),因此13^50=63,得到正确的最大值
  • 最小值求解可得x=16,16^50=34,为区间内异或结果的最小值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:40:44