【数据结构与算法】位运算经典题

位运算原理

基本位运算

x ^ 0s = x      x & 0s = 0      x | 0s = x
x ^ 1s = ~x     x & 1s = x      x | 1s = 1s
x ^ x = 0       x & x = x       x | x = x

感觉这得记住

去除两个相同的数

利用 x ^ x = 0

掩码操作

利用 x & 0s = 0 和x & 1s = x 可以实现掩码操作,例如 x & 0b0011100 仅保留x中与 1 重叠的部分

设值操作

利用 x | 1s = 1s 和 x | 0s = x 可实现设值操作,例如 x | 0b0011100 把x中与右边 1 相对应的部分设值为1

只出现一次的数字

LeetCode:只出现一次的数字

题目描述:

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例:

输入: [4,1,2,1,2]
输出: 4

思想:

利用 x ^ x = 0 去除两个相同的数

代码:

class Solution {
    public int singleNumber(int[] nums) {
        int m = 0;
        for(int item : nums){
            m ^= item;
        }
        return m;
    }
}
上一篇:vector,deque


下一篇:常用的排序算法