LeetCode题解:Single Number最优解法
来源:互联网 发布:aes数据加密 编辑:程序博客网 时间:2024/06/01 20:35
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?
题目大意:
一个整数数组中,除了一个数只出现了一次,其余的数都出现了两次。找到出现一次的那个数。
你的算法时间复杂度应为O(n),你能在实现的同时不使用额外空间吗?
解题思路:
时间复杂度O(n),说明我们只能遍历一次数组,而且数组是无序的,遍历完后要得到答案。数的特点是:除了答案,两两相同。所以此时我的想法是能不能通过一种运算把相同的数字去掉,最后留下答案。然后随便找了两个相同的数用二进制表达,就想到了异或(XOR)运算。
异或:
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。
运算法则:
1. a ⊕ a = 0
2. a ⊕ b = b ⊕ a
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.
6.若x是二进制数0101,y是二进制数1011
则x⊕y=1110
只有在两个比较的位不同时其结果是1,否则结果为0
即“相同为0,不同为1”!
代码:
<span style="font-size:12px;">public class Solution { public int singleNumber(int[] A) { int temp = A[0]; for(int i = 1;i<A.length;++i) temp^=A[i]; return temp; }}</span>
0 0
- LeetCode题解:Single Number最优解法
- 【LeetCode题解】Single Number
- LeetCode题解:Single Number
- LeetCode题解:Single Number
- LeetCode题解:Single Number
- leetcode:Single Number 菜鸟解法
- 【LeetCode题解】Single Number II
- [题解][LeetCode][Single Number II]
- LeetCode题解:Single Number II
- LeetCode题解:Single Number II
- LeetCode题解:Single Number III
- leetcode 136. Single Number 题解
- Leetcode题解 136. Single Number
- LeetCode Single Number系列题解
- LeetCode 136 Single Number题解
- 【Leetcode题解】136.Single Number
- LeetCode题解:Single Number I and II
- LeetCode 题解(23): Single Number II
- android toast自定义及常规使用
- 文本框添加keydown事件
- 不落地数据导入导出
- 乱七八糟的东西写给自己看的
- HDU 2031
- LeetCode题解:Single Number最优解法
- java 实践源码--二叉树
- android fragment_main.xml 注意问题
- CSS设置字体和文字样式
- HGE引擎的粒子系统
- 第十二周项目二 OJ平台-刑警的射击成绩
- java实践源码--哈弗曼树
- JAVA学习笔记---简易计算器完整功能
- Delphi中ShellExecute的妙用