题解 | #最接近的数#

最接近的数

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};
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务