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

mac2022-06-30  154

最接近的数 牛客网 程序员面试金典 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

 

转载于:https://www.cnblogs.com/vercont/p/10210317.html

最新回复(0)