算法笔试模拟题精解之“一的个数” <19算法笔试模拟题精解之“一的个数”贡献者 | 郭达彬简介:根据题意,本题的所有数字应从二进制角度考虑。题目描述题目等级:容易知识点:位运算、贪心查看题目:一的个数给你两个数字 l、r,问在区间 [l,r] 内的所有数中,二进制表示下“1”的个数最多的一个数是多少,如果有多个相同的,输出所有符合条件的数中最小的一个数。输入一个整数 l, 和一个整数 r。(1<=l<=r<=10^9)输出一个数字表示 [l,r] 内二进制下“1”的个数最多的数。如果有多个,输出符合条件的数中最小的。示例 1输入:510输出:720>算法笔试模拟题精解之“一的个数”解题思路:二进制根据题意,本题的所有数字应从二进制角度考虑。所求数字可分为两部分,高位部分和低位部分,高位部分的值等于 l, r 高位相等的部分,在区间 [l,r] 中的所有数的高位部分都应该与其相等,即high = r & (-1<低位的部分计算过程如下:如果 r-high 的值的二进制全为 1,则低位部分为 r-high。如果不是全为 1,则低位部分为( 1<<(count-1) ) - 1时间复杂度:O
目录
171
0
收起右侧 展开右侧
程序员面试宝典 > 算法笔试模拟题精解之“一的个数”
  • 读书笔记
    我的笔记
    暂无相关笔记,快来写一篇吧!
点击浏览下一章>>