题解 | #最接近的数#

最接近的数

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

相关推荐

牛至超人:哈工大已经很棒了,不需要加括号了,然后咋没有实习经历呢?火速趁寒假整一段实习,导师不让就狠狠肘击
投了多少份简历才上岸
点赞 评论 收藏
分享
2025-12-25 16:26
已编辑
河北科技学院 Java
勇敢的牛油不服输:2800-300那不等于2500一个月吗兄弟们
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务