程序员面试金典--面试27之有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数

xiaoxiao2021-02-28  101

题目描述 有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小) 给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。 测试样例: 2

返回:[1,4]

思路:这道题没想到什么好办法,只想到了暴力法,先判断这个数二进制有几个1,然后前面那个数从x-1开始试,后面那个数从x+1开始试,看那个数的二进制中1的个数和x相等。

#include<iostream> using namespace std; #include<vector> //求x中二进制1的个数 int GetBinNum(int x) { int count = 0; while(x) { count++; x = x & (x-1); } return count; } vector<int> GetCloseNumber(int x) { vector<int> ret; if(x <=0) return ret; int count = GetBinNum(x); int pre = x-1; while(GetBinNum(pre)!= count) pre--; ret.push_back(pre); int next = x+1; while(GetBinNum(next) != count) next++; ret.push_back(next); return ret; } int main() { int num = 2; vector<int> ret = GetCloseNumber(num); for(int i = 0; i < ret.size(); ++i) cout << ret[i] << " "; cout <<endl; }

转载请注明原文地址: https://www.6miu.com/read-44816.html

最新回复(0)