位运算

概况知识点

运算符 作用
l 合取
& 析取
^ 异或

实例一

  • num & 1求num的最后一位
  • num1 ^ num2若两数相同,结果为0

题目1

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

int singleNumber(vector &nums) {
    int ans = 0, i;
    for (i = 0; i < nums.size(); i++) {
        ans = ans ^ nums[i];
    }
    return ans;
}

题目2

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次。找出那个只出现了一次的元素。

int singleNumber(vector &nums) {
    int ans = 0, i, j;
    for (i = 0; i < 32; i++) {
        int sum = 0;
        for (j = 0; j < nums.size(); j++) {
            sum += (nums[j] >> i) & 1;
        }
        ans ^= (sum % 3) << i;
    }
    return ans;
}

你可能感兴趣的:(数论)