当前位置: 首页 > 知识库问答 >
问题:

数组中满足位方程式的对数

颜志业
2023-03-14

2*set_bits(XY)=M+set_bits(X(Y))

注:

  • set_bits(n)表示整数n的二进制表示中1的个数。
  • xy表示整数X和y的按位或。
  • X?y表示整数X和y的按位异或。
  • 无序数组元素对是对(Ai,Aj),其中1≤i

共有1个答案

冀耀
2023-03-14

如果set_bits的时间复杂度为O(1),则存在时间复杂度O(n)的解决方案。

首先,我们将对这个条件(按位方程)进行稍微修改。假设给定一对元素(X,Y)。设C_01表示X为0但Y为1的位数,C_10表示X为1且Y为0的位数,C_11表示X和Y为1的位数。例如,当x=5y=1(x=101,y=001)时,c_01=0c_10=1c_11=1。现在,条件可以重写为

2 * (c_01 + c_10 + c_11) = M + (c_01 + c_10)

因为set_bits(XY)等于C_01+c_10+C_11set_bits(x^y)等于C_01+c_10。我们可以把方程重新排序为

c_01 + c_10 + 2*c_11 = M

把右边的项移到左边。现在,认识到set_bits(X)=c_10+C_11。将这些信息应用到我们得到的方程上

c_01 + c_11 = M - set_bits(X)

现在,还要认识到set_bits(Y)=c_01+c_11。等式变成

set_bits(Y) = M - set_bits(X)

set_bits(X) + set_bits(Y) = M
 类似资料:
  • 我打算访问zip文件的s3存储桶。 当我使用下面的代码时,它可以访问存储桶,因为它使用存储桶的根目录。 “S3Bucket”:{“Ref”:“HandlerCodeS3Bucket”}, 当我想访问同一个bucket的layers文件夹时,我使用HandlerCodeS3BucketLayer参数。 但它显示以下错误。

  • 问题:“一种计算六位数的算法,其中前三位数的和等于后三位数的和。” 我在一次采访中遇到了这个问题,想知道最好的解决方案。这就是我现在所拥有的。 方法1:暴力解决方案当然是检查每个数字(100000到999999之间)的前三位和后三位的总和是否相等。如果是,则递增某个计数器,该计数器记录所有此类数字。 但这检查了所有900,000个号码,因此效率低下。 方法2:既然我们被问到“有多少”这样的数字,而

  • 问题内容: 我在SQL Server中具有以下数据结构表: 等等。 我需要做的是获取所有连续的日子,其中Allocation = 0,并采用以下形式: 等等。 可以在SQL中执行此操作吗?如果可以,如何执行? 问题答案: 在此答案中,我将假定“ id”字段按递增日期进行排序时,对行进行连续编号,就像示例数据中所做的那样。(如果不存在,则可以创建这样的列)。 这是此处和此处描述的技术示例。 1)在相

  • 问题内容: 使用以下模型: 如果我要查找包含至少一篇文章的订单操作,则可以按预期工作: 但是,如果要查找订单中所有商品的订单操作,正确的方法是什么? 引发错误(我理解为什么会这样)。 问题答案: 一个简单的解决方案: 这只是一个查询,但每篇文章都有一个内部联接。对于多篇文章,Willem更巧妙的解决方案应该会表现更好。

  • 题目描述 这是今晚阿里巴巴笔试编程题的其中一道。原题描述如下: 对于任何整数 $x$,一定存在整数对 $(a, b)$,使得 $x \oplus a \oplus b$ 最大。其中,$\oplus$ 表示异或,$0≤x,a,b≤2^{31}-1$。给定一个 $x$,输出使得 $\vert a-b\vert $ 最小的 $(a, b)$ 对的个数。 示例: 输入 0,输出 2 输入 100,输出 1

  • js 对象数组,长度不足10位,怎么补到10位? 有什么好的方法,不足10位的长度,填补空对象,现在想到通过长度10-arr.length然后循环push,有什么其它好的方法,可以快速补全吗? arr 里面的对象