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内存区域
    Zookeeper使用场景
    zookeeper知识点总结
    前端小技术总结
    lambda表达式的使用
    Comparator进行List集合排序
  • 原文地址:https://www.cnblogs.com/vercont/p/10210317.html
Copyright © 2011-2022 走看看