136. Single Number and与、或、异或、取反、左移和右移运算
来源:互联网 发布:手机直播源码教程 编辑:程序博客网 时间:2024/05/17 14:27
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
my answer:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int b=0;
for(int i=0;i<nums.size();i++)
{
b^=nums[i];
}
return b;
}
};
注意事项:
此题相对来说并不难,但是如果不懂用异或运算的话就可能会把问题复杂化。
利用异或操作。异或的性质1:交换律a ^ b = b ^ a,性质2:0 ^ a = a。于是利用交换律可以将数组假想成相同元素全部相邻,于是将所有元素依次做异或操作,相同元素异或为0,最终剩下的元素就为Single Number。
异或运算:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
0 0
- 136. Single Number and与、或、异或、取反、左移和右移运算
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- 【C语言位运算符:与、或、异或、取反、左移和右移】
- C语言位运算符:与、或、异或、取反、左移和右移
- C语言位运算符:与、或、异或、取反、左移和右移
- 机试--删除嵌套注释
- bzoj1612
- BZOJ 2165 大楼
- 蓝桥杯之切面条
- Ubuntu中配置shadowsocks代理
- 136. Single Number and与、或、异或、取反、左移和右移运算
- [无向图简单环计数 状压DP] Codeforces 11D Beta Round #11 D. A Simple Task
- 两步快速配置java环境
- 构建jscript.debug包
- Hibernate操作表单
- LeetCode 第50题 Pow(x, n) [log(n)]
- POJ 2610 Dog & Gopher G++
- openlayers与echarts3的结合使用
- 一个有趣的题目【二分答案,2-SAT,线段树优化】