zoukankan      html  css  js  c++  java
  • 最接近的数 牛客网 程序员面试金典 C++ Python

    最接近的数 牛客网 程序员面试金典 C++ Python

    • 题目描述

    • 有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)

    • 给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。

    • 测试样例:

    • 2

    • 返回:[1,4]

    C++

    class CloseNumber {
    public:
        //run:3ms memory:504k
        vector<int> getCloseNumber(int x) {
            vector<int> ret;
            int count = getOneCount(x);
            int lower = x-1;
            int larger = x+1;
            while(getOneCount(lower) != count) lower--;
            ret.push_back(lower);
            while(getOneCount(larger) != count) larger++;
            ret.push_back(larger);
            return ret;
        }
        
        int getOneCount(int x){
            int count = 0;
            for(;x;count++) x= x&(x-1);
            return count;
        }
    };

    Python

    class CloseNumber:
        #run:38ms memory:5732k
        def getCloseNumber(self, x):
            ret = []
            lower = x - 1
            larger = x + 1
            count = self.getOneCount(x)
            while self.getOneCount(lower) != count: lower -= 1
            ret.append(lower)
            while self.getOneCount(larger) != count: larger += 1
            ret.append(larger)
            return ret
        
        def getOneCount(self,x):
            count = 0;
            while x:
                count += 1
                x = x & (x -1)
            return count
  • 相关阅读:
    java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
    Lambda表达式详解
    MAC JDK 卸载方法(彻底卸载)
    JAVA final关键字
    JAVA访问权限
    JAVA重写
    JAVA继承
    单例设计模式---懒汉式和饿汉式
    JAVA构造块和静态代码块
    Java static关键字
  • 原文地址:https://www.cnblogs.com/vercont/p/10210317.html
Copyright © 2011-2022 走看看