- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
因为我有一个技术面试,最近开始研究《Cracking the Coding Interview》这本书。
我在练习5.1的题时,发现书上的解法和我的不一样。
问题是:
给定两个 32 位数字 N 和 M,以及两个位位置 i 和 j。编写一个方法,将 N 中 i 和 j 之间的所有位设置为 M(例如,M 成为 N 的子串,位于 i 并从 j 开始)。示例:
Input: N = 10000000000, M = 10101, i = 2, j = 6
Output: N = 10001010100
解决方法是:
public static int updateBits2(int n, int m, int i, int j) {
int max = ~0;
int left = max - ((1 << j) - 1);
int right = (1 << i) - 1;
int mask = left | right;
int maskN = mask & n;
int result = maskN | (m << i);
return result;
}
关键点是创建一个掩码将n的i到j位设置为0,并将 m 左移到 i 位置并对 m 和 n 进行或运算。
当输入为n=89,m=3,i=2,j=4时,答案应该是77,对于:
n = 1011001
m = 011
n with 2 to 4 set by m = 1001101 = 77
但是解的结果是93。
然后我发现解决方案创建的掩码缺少一个0位在左侧。例如,掩码应该是 1100011 上面给定的输入。但是解决方案创建的掩码是 1110011。
我通过更改这一行来解决这个问题
int left = max - ((1 << j) - 1);
到
int left = max - ((1 << j + 1) - 1);
所以我的问题是,解决方案是错误的还是我遗漏了什么?
最佳答案
您可以从示例中看出,其中 i=2、j=6 和 5 位发生了变化,[i,j] 意味着包含范围。所以如果你有 i=2 和 j=4,你应该设置 3 位,而不是 2。
所以你发布的函数(我不知道是你的还是引用的)叫做updateBits2
不正确。
但是,当 j==31
时,您的修复失败了,这是他们会在编码面试中打扰您的事情。而不是 (1<<(j+1))-1
, 使用 (1<<j)|((1<<j)-1)
, 或将整行缩短为 left = -2<<j;
关于java - Cracking the Coding Interview中5.1的解法错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919582/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我已经从 freerainbowtables.com 下载了 Rainbow Tables。它的扩展名为 .rti 。我想知道是否有办法将此文件作为文本文件或任何其他文件读取。我想编写一个简单的程序来
java中有一个破解密码本求平方根的算法如下: int sqrt(int n) { return sqrt_helper(n, 1, n); } int sqrt_helper(int n, in
因为我有一个技术面试,最近开始研究《Cracking the Coding Interview》这本书。 我在练习5.1的题时,发现书上的解法和我的不一样。 问题是: 给定两个 32 位数字 N 和
我是一名 CS 学生,大约一周前我买了破解编码面试。我只是在 Big O 章节,我发现了一种算法,据说可以对数字中的数字求和;乍一看,它看起来很困惑,所以我用 Python 运行了它,但它没有按预期运
我附上了一个精简版的程序。我遇到的问题是,当我打印N时,在末尾有一个额外的 *,我没有设法从代码中删除。我已经试了好几个小时了,但似乎就是破解不了。。我已经将+‘S改为-’S,反之亦然。我尝试了增减值
我附上了一个精简版的程序。我遇到的问题是,当我打印N时,末尾有一个多余的*,我没有设法从代码中删除它。我已经试了好几个小时了,但似乎就是破解不了。。我已经将+‘S改为-’S,反之亦然。我尝试了增减值。
我们有某种阴极 Material 的扫描电子显微镜 (SEM) 图像,我的目标是找出图像中裂纹所占的百分比。关于如何做到这一点有什么建议吗?目前,我只是尝试找到图像中“最暗”像素的数量,并获取图像中像
来自 Cracking the Coding Interview。问题 2.1:编写代码从未排序的链表中删除重复项。这是他们提供的解决方案: public static void removeDupl
我试图了解 AudioWorklet 正在工作并进行了一些测试。 到目前为止,当我让浏览器在后台播放声音并执行其他操作(例如,打开像 Photoshop 或 VSCode 这样的 CPU 密集型应用程
我尝试使用 Cracking the coding interview 中的代码来运行反向字符串函数。我不知道代码是否错误或者我应该使用另一个 IDE(我为此使用了 Xcode 5.2)。我是 C 编
在 Cracking the coding interview 一书的第 259 页,给出了 C++ 中的模板化单例(我不想发布所有代码以防其版权)。 问题是将单例实现为模板,并假设有一个名为 Loc
我正在阅读“Cracking the Coding Interview”一书,在这里我遇到了一些寻求答案的问题,但我需要帮助来比较我的答案与解决方案。我的算法有效,但我很难理解书中的解决方案。主要是我
我是 JavaScript 的新手。我正在尝试创建一个随机破解配对生成器,将名称与提示进行匹配。 添加更多列表后,它停止工作 - 没有提示或名称出现,我无法发现错误。 Cr
我在整个网络上进行了搜索,但未能找到解决此错误的方法。每次我尝试启动 Rails 服务器,甚至是 Rails 控制台时,我都会得到一个 crack/xml (LoadError)。有人有任何他们认为可
这个问题已经有答案了: How do I properly compare strings in C? (10 个回答) 已关闭 4 年前。 我正在研究 Pset2:Crack,但我认为背景在这里并不
我正在尝试解决一个面试问题,这样给定的链表需要围绕一个值“x”进行分区。我尝试了一下,但没有得到想要的结果。 class Node(object): def __init__(self, va
You have a stack of n boxes, with widths wi, heights hi, and depths di. The boxes cannot be rotated
You have two very large trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an
我是一名优秀的程序员,十分优秀!