题解 | #最接近的数#
最接近的数
http://www.nowcoder.com/practice/33ad4d168a3247b9b63f41e4eaded652
class CloseNumber {
public:
vector<int> getCloseNumber(int x) {
// write code here
bitset<32> lower(x);
bitset<32> upper(x);
int l = -1;
for (int i = 0; i < lower.size() - 1; i++)
{
if (lower[i] == 0 && lower[i + 1] == 1)
{
lower.flip(i);
lower.flip(i + 1);
int left = 0, right = i - 1;
while (left < right)
{
while (lower[left] == 0)
{
left++;
}
while (lower[right] == 1)
{
right--;
}
if (left < right)
{
lower.flip(left++);
lower.flip(right--);
}
}
break;
}
}
l = (int)lower.to_ulong();
int r = -1;
for (int i = 0; i < upper.size() - 1; i++)
{
if (upper[i] == 1 && upper[i + 1] == 0)
{
upper.flip(i);
upper.flip(i + 1);
int left = 0, right = i - 1;
while (left < right)
{
while (upper[left] == 1)
{
left++;
}
while (upper[right] == 0)
{
right--;
}
if (left < right)
{
upper.flip(left++);
upper.flip(right--);
}
}
break;
}
}
r = (int)upper.to_ulong();
return {l, r};
}
};