zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 05.04. 下一个数

    题目:

    下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

    示例1:

    输入:num = 2(或者0b10)
    输出:[4, 1] 或者([0b100, 0b1])
    示例2:

    输入:num = 1
    输出:[2, -1]
    提示:

    num的范围在[1, 2147483647]之间;
    如果找不到前一个或者后一个满足条件的正数,那么输出 -1。

    分析:

    暴力解法,编写一个统计数字二进制1的个数,然后从给定数字开始遍历,判断当前数字和给定数字1的个数是否相同,这样便可以找到结果。

    程序:

    class Solution {
        public int[] findClosedNumbers(int num) {
            int[] res = new int[]{-1, -1};
            int numOne = countOne(num);
            for(int i = num+1; i <= 2147483647; ++i){
                int t = countOne(i);
                if(t == numOne){
                    res[0] = i;
                    break;
                }
            }
            for(int i = num-1; i >= 1; --i){
                int t = countOne(i);
                if(t == numOne){
                    res[1] = i;
                    break;
                }
            }
            return res;
        }
        private int countOne(int num){
            int count = 0;
            while(num != 0){
                if((num & 1) == 1)
                    count++;
                num >>= 1;
            }
            return count;
        }
    }
  • 相关阅读:
    状态码
    vue+element下拉选项添加点击事件可跳转或触发事件
    position定位
    vue+element下拉菜单添加事件
    vue封装接口
    vue+element实现导入excel并拿到返回值
    10. EIGRP的stud
    9. EIGRP认证和默认路由
    8. EIGRP负载均衡
    7. EIGRP中应用偏移列表
  • 原文地址:https://www.cnblogs.com/silentteller/p/12448471.html
Copyright © 2011-2022 走看看