小细节

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

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;



    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务