LeetCode 编程算法题 14

    科技2023-12-17  88

    出现一次的数字

    题目描述 现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素 注意: 你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么? 示例1 输入

    [0,0,0,5] 输出

    5

    class Solution { public: /** * * @param A int整型一维数组 * @param n int A数组长度 * @return int整型 */ int singleNumber(int* A, int n) { // write code here //vector<int> bin(32,0); int bin[32] = {0}; for(int i = 0; i < n; i++) { int num = A[i]; int count = 0; for(int j = 0; j < 32; j++) { bin[j] += num & 0x01; //bin[j] = bin[j] + (num & 0x01); num = num >> 1; } } int res = 0; for(int j = 0; j < 32; j++) { //res += bin[j]%3 * 2^j; n次方表达错误, 优先级错误 //res = res + bin[j]%3 * (pow(2,j)); 优先级错误 //res = res + (bin[j]%3)<<j; 优先级错误 res += ((bin[j]%3)<<j); } cout<<res<<endl; return res; } };

    相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7. 逻辑运算最后结合。

    Processed: 0.017, SQL: 9