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

寻找最小操作数以最大化按位and运算符的和

司允晨
2023-03-14

给定一个整数 Arr 数组和一个整数 K,将对每个具有整数 X 的元素 A[i] 执行按位 AND

让Final sum定义如下:i的所有值(0到array-1的长度)的总和(A[i]AND X)

返回受以下约束的整数 X:

  • 最终总和应该是最大值
  • X在其二进制表示中应该将K位精确地包含为1
  • 如果X的多个值满足上述条件,则返回可能的最小值X
Input:
Arr : [8,4,2]
K = 2

Output: X=12

12在其二进制中恰好包含2位,并且是为所有(A[i]AND X)的求和给出最大可能答案的最小数字

尝试的方法:

对二进制数组中的所有数字进行按位“或”运算,保留二进制中为1的前K位,使剩余的位为0,转换回int

通过 7/12 测试用例

有人能帮我指出我在这个方法上犯了什么错误,或者建议一个更好的方法吗?提前感谢。

共有2个答案

应嘉容
2023-03-14

dp[k][i] 表示最大和(a

dp[1][i]:
  sum(a & 2^i)
  
dp[k][i]:
  sum(a & 2^i) + max(dp[k-1][j])
    for j < i

<代码>总和(a

因此,对于每个 k,我们迭代 m is。总体时间复杂度 O(k * m n * m),其中 m 是字大小。

曾典
2023-03-14

考虑像[8,4,4,4], K=1这样的输入。您的算法将给出8,但正确答案是4。仅仅因为给定的位更重要并不意味着它会自动对总和做出更多贡献,因为数组中使用较小位的元素可能会增加两倍以上。

我的建议是计算潜在 X 的每个位的权重 - 数组中设置了该位的元素数乘以该位的值(2i 表示位 i)。然后找到权重最大的 K 位。

为此,你需要知道你的整数有多大——如果它们是32位,你只需要计算32个权重。如果他们可能更大,你需要更多。根据您的编程语言,您可能还需要担心权重计算的溢出(或者sum计算——这是真的sum,还是sum mod 2n for some n?).如果数组中的某些元素可能是负数,那么负数是如何表示的(2s补码?)以及它如何与和交互?

 类似资料:
  • 还在纠结递归。我有一个代码,它应该让我得到最少的操作,以便从x到y。只有乘以2或加+1,例如从7到12...它的5次操作,因为你需要+1次。我的代码对我来说没有正确的工作,我无法找出我缺少了什么来保证它是正确的。

  • 我有一个熊猫数据框,有两列,一列是温度,另一列是时间。 我想做第三和第四列,叫做最小和最大。这些列中的每一个都将填充nan's,除非有一个局部min或max,那么它将具有该极值的值。 这里是一个数据的样本,本质上我试图识别图中所有的峰值和低点。 有没有内置的熊猫工具可以做到这一点?

  • 最小操作数 题目描述 给定一个单词集合Dict,其中每个单词的长度都相同。现从此单词集合Dict中抽取两个单词A、B,我们希望通过若干次操作把单词A变成单词B,每次操作可以改变单词的一个字母,同时,新产生的单词必须是在给定的单词集合Dict中。求所有行得通步数最少的修改方法。 举个例子如下: Given: A = “hit” B = “cog” Dict = [“hot”,”dot”,”dog”,

  • 我有一个字符串s和一个整数k(子字符串长度),我正在尝试编写函数,这样它就可以找到长度为k的最小和最大的子字符串。并返回一个字符串,其中最小和最大的子字符串与换行符组合在一起。 到目前为止,我用下面的方法解决了这个问题,我编写了相同的代码来查找最小和最大的子字符串,然而,我想用流返回两个子字符串的单行代码。 我非常感谢任何建议,因为我现在正在学习lambda和stream。 那么,我该如何优雅地解

  • 下面是寻找最小跳跃次数的算法谜题。发布了详细的问题声明和两个代码版本来解决这个问题。我做了测试,似乎两个版本都可以工作,我的第二个版本是版本一代码的优化版本,这使得我从开始,而不是持续增加,这可以通过不迭代所有的插槽来节省时间数组。 我的问题是,想知道我的第二个版本代码是否100%正确?如果有人发现任何逻辑问题,请指出。 问题陈述 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个

  • 问题内容: 我有一个python程序,它将打开一个新窗口以显示一些“关于”信息。该窗口有其自己的关闭按钮,而我已使其不可调整大小。但是,最大化和最小化按钮仍然存在,我希望它们消失。 我正在使用Tkinter,包装所有信息以显示在Tk类中。 到目前为止的代码如下。我知道它不是很漂亮,我打算将信息扩展到一个类中,但是我想在继续之前解决这个问题。 任何人都知道如何管理Windows管理器显示哪些默认按钮