小细节

数组中只出现一次的两个数字

http://www.nowcoder.com/questionTerminal/389fc1c3d3be4479a154f63f495abff8

int yes=1;
后面,再yes^=1;就能很好的解决代码细节设计

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> FindNumsAppearOnce(vector<int>& array) {
        // write code here



        int len=array.size();
        if( 0==len || 1==len )
        {
            return array;
        }
        if( 2==len )
        {
            if( array[0]!=array[1] )
            {
                return array;
            }
            else
            {
                vector<int> ret;
                ret.push_back( array[0] );
                return ret;
            }
        }



        int temp=array[0]^array[1];
        for(int i=2; i<len; ++i)
        {
            temp^=array[i];
        }

        int num=1;
        while( 1 )
        {
            if( num&temp )
            {
                break;
            }
            num<<=1;
        }

        int yes=1,no=1;
        for(int i=0; i<len; ++i)
        {
            if( num&array[i] )
            {
                yes^=array[i];
            }
            else
            {
                no^=array[i];
            }
        }

        yes^=1;
        no^=1;

        vector<int> ret;
        ret.push_back( yes );
        ret.push_back( no );
        if( yes>no )
        {
            reverse( ret.begin(), ret.end() );
        }

        return ret;



    }
};
全部评论

相关推荐

2025-11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
2025-12-01 15:04
吉首大学 后端工程师
冲鸭2024:亚信不去也罢
投递亚信科技(中国)有限公司等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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