Python按位取反运算符'~'在LeetCode275的hIndex代码中如何工作?
解释LeetCode 275题hIndex代码中的按位取反
~ 1. ~运算符的本质
在Python中,按位取反~对整数m的计算规则是:~m = -(m + 1)。比如:
~0 = -1~1 = -2~2 = -3
本质是对整数的二进制补码进行取反操作,最终映射成对应的负整数。
2. 在数组索引中的实际作用
LeetCode 275题的输入citations是升序排列的数组。Python支持数组负索引,citations[-k]表示从数组末尾往前数第k个元素。所以citations[~m]等价于citations[-(m+1)],也就是取数组中倒数第m+1个元素。
举个实际例子:假设数组长度为5,当m=0时,~0=-1对应数组最后一个元素;m=1时,~1=-2对应倒数第二个元素,完全匹配从后往前的索引逻辑。
3. 结合二分逻辑理解为什么用~
h指数的核心定义是:研究者有h篇论文被引用至少h次。这段代码用二分法快速定位这个h值:
- 当
citations[~m] > m时:因为数组是升序的,从citations[~m]到数组末尾的所有元素(共m+1篇)都大于m,说明至少有m+1篇论文被引次数超过m,h指数可以更大,所以将左边界l更新为m+1。 - 否则:说明当前
m已经是h指数的候选上限,将右边界r更新为m。
最终返回的l就是满足条件的最大h指数。
内容的提问来源于stack exchange,提问作者Nefarious
相关产品推荐
相关产品推荐

