给定一个整数 Arr 数组和一个整数 K,将对每个具有整数 X 的元素 A[i] 执行按位 AND
让Final sum定义如下:i的所有值(0到array-1的长度)的总和(A[i]AND X)
返回受以下约束的整数 X:
Input:
Arr : [8,4,2]
K = 2
Output: X=12
12在其二进制中恰好包含2位,并且是为所有(A[i]AND X)的求和给出最大可能答案的最小数字
尝试的方法:
对二进制数组中的所有数字进行按位“或”运算,保留二进制中为1的前K位,使剩余的位为0,转换回int
通过 7/12 测试用例
有人能帮我指出我在这个方法上犯了什么错误,或者建议一个更好的方法吗?提前感谢。
设 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
i
s。总体时间复杂度 O(k * m n * m),
其中 m
是字大小。
考虑像[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管理器显示哪些默认按钮