Redian新闻
>
纽约医院收治的武冠病毒感染重症患者的统计结果
avatar
纽约医院收治的武冠病毒感染重症患者的统计结果# Biology - 生物学
z*8
1
career cup5.1
题目:
You are given two 32-bit numbers, N and M, and two bit positions, i and j.
Write a
method to set all bits between i and j in N equal to M (e.g., M becomes a
substring of
N located at i and starting at j).
EXAMPLE:
Input: N = 10000000000, M = 10101, i = 2, j = 6
Output: N = 10001010100
答案:
This code operates by clearing all bits in N between position i and j, and
then ORing to put
M in there.
1 public static int updateBits(int n, int m, int i, int j) {
2 int max = ~0; /* All 1’s */
3
4 // 1’s through position j, then 0’s
5 int left = max - ((1 << j) - 1);
6
7 // 1’s after position i
8 int right = ((1 << i) - 1);
9
10 // 1’s, with 0s between i and j
11 int mask = left | right;
12
13 // Clear i through j, then put m in there
14 return (n & mask) | (m << i);
15 }
这道题,是不是答案有问题?第五行应该是i<他要清空i~j,我就以这个例子来说,mask应该是0000011(最后7位),但是他这样出来
就是000011,最高位不清理
avatar
t*u
2
avatar
x*4
3
对纽约医院收治的新冠病毒感染重症患者的统计结果:94%有慢性病,88%至少有两种慢
性病。
最常见的慢性病是高血压(57%)、肥胖(42%)、糖尿病(34%)。
可见没慢性病的人几乎不会得重症。
收治时只有31%发烧,可见体温筛查没什么用。14%进ICU,21%死亡,也就是说相当一部
分住院病人没来得及进ICU就死了。
avatar
b*i
4
到计算机上运行以下,只有编译器才能告诉你代码是否正确。

【在 z**********8 的大作中提到】
: career cup5.1
: 题目:
: You are given two 32-bit numbers, N and M, and two bit positions, i and j.
: Write a
: method to set all bits between i and j in N equal to M (e.g., M becomes a
: substring of
: N located at i and starting at j).
: EXAMPLE:
: Input: N = 10000000000, M = 10101, i = 2, j = 6
: Output: N = 10001010100

avatar
x*4
5
&name=large
avatar
z*8
6
运行出来是-61,就是000011,那应该是它错了~xiexie

【在 b***i 的大作中提到】
: 到计算机上运行以下,只有编译器才能告诉你代码是否正确。
avatar
x*4
7
&name=large
avatar
b*i
8
不对啊,我怎么算他是对的?

【在 z**********8 的大作中提到】
: 运行出来是-61,就是000011,那应该是它错了~xiexie
avatar
b*1
9
我眼拙,看了好几遍 https://www.ncbi.nlm.nih.gov/pubmed/32320003, 没找着 “
94%有慢性病,88%至少有两种慢性病。”
如果是真的, 那可真是太好了。

【在 x*********4 的大作中提到】
: 对纽约医院收治的新冠病毒感染重症患者的统计结果:94%有慢性病,88%至少有两种慢
: 性病。
: 最常见的慢性病是高血压(57%)、肥胖(42%)、糖尿病(34%)。
: 可见没慢性病的人几乎不会得重症。
: 收治时只有31%发烧,可见体温筛查没什么用。14%进ICU,21%死亡,也就是说相当一部
: 分住院病人没来得及进ICU就死了。

avatar
d*e
10
对比一下例子和code,区别似乎在于最右一位是position 0还是1.
至少code没太大问题,但定义好第低位是position 0还是1就没问题了,我觉得.

【在 z**********8 的大作中提到】
: career cup5.1
: 题目:
: You are given two 32-bit numbers, N and M, and two bit positions, i and j.
: Write a
: method to set all bits between i and j in N equal to M (e.g., M becomes a
: substring of
: N located at i and starting at j).
: EXAMPLE:
: Input: N = 10000000000, M = 10101, i = 2, j = 6
: Output: N = 10001010100

avatar
a*g
11
武汉肺炎(代号:COVID-19)没有那么厉害啊

【在 x*********4 的大作中提到】
: 对纽约医院收治的新冠病毒感染重症患者的统计结果:94%有慢性病,88%至少有两种慢
: 性病。
: 最常见的慢性病是高血压(57%)、肥胖(42%)、糖尿病(34%)。
: 可见没慢性病的人几乎不会得重症。
: 收治时只有31%发烧,可见体温筛查没什么用。14%进ICU,21%死亡,也就是说相当一部
: 分住院病人没来得及进ICU就死了。

avatar
z*8
12
其实你看下code和这个例子我觉得应该错的蛮明显的啊,难道是我理解有问题?
这个例子他要清空5位,2,3,4,5,6这五位。
第五行left把1向左移6位,后面跟着等于是1000000,然后减一就是111111,然后拿全
部位都是1的max去减它,变成最后六位为0,前面全部为1,这就是left吧;
同样的道理,right就应该是最后两位为1,前面全部为0
这样mask出来后,就应该是最后两位为1,然后隔了四位是0,然后继续是1,就像11111
...11000011这样。这样一来n & mask就只会清空4位而已啊~~

【在 b***i 的大作中提到】
: 不对啊,我怎么算他是对的?
avatar
k*g
13
楼上安安🐷,那个叫新冠
avatar
z*8
14
code的思想肯定是对的,我只是觉得他好像移位少移了一位,就是在第五行,left应该
是i<
【在 d**e 的大作中提到】
: 对比一下例子和code,区别似乎在于最右一位是position 0还是1.
: 至少code没太大问题,但定义好第低位是position 0还是1就没问题了,我觉得.

avatar
z*8
15
求哪位高人解释下这个问题啊~~~
avatar
h*e
16
不是高人。但是你的确是对的,书上的code是错的。
你可以在这儿下载最新的源程序:
http://www.crackingthecodinginterview.com/content/download-solu
BTW,作者除了fix这个问题外,还改进了该代码:
int allOnes = ~0; // allOnes = 11111111
int left = allOnes << (j + 1); // 1s through position j, then 0s. left =
11100000
avatar
z*8
17
谢谢了!~

【在 h****e 的大作中提到】
: 不是高人。但是你的确是对的,书上的code是错的。
: 你可以在这儿下载最新的源程序:
: http://www.crackingthecodinginterview.com/content/download-solu
: BTW,作者除了fix这个问题外,还改进了该代码:
: int allOnes = ~0; // allOnes = 11111111
: int left = allOnes << (j + 1); // 1s through position j, then 0s. left =
: 11100000

avatar
y*n
18
看原题有两个不明确的东西:
1. i和j是以0为基数,还是以1为基数。
2. “all bits between i and j”是否包含i和j位本身?
从代码上看,你想使用((1 << i) - 1)实现若干位的1,
但如果i>=32,会有整数溢出,也就是说不能用这个方法生成32未全1值。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。