首页 > 代码库 > Leetcode 136. Single Number
Leetcode 136. Single Number
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(1),使得不能用排序方法,也不能使用map数据结构。那么只能另辟蹊径,需要用位操作Bit Operation来解此题。
这里用到逻辑异或的两个性质:
一:相同的两个int型数据 ^ 之后为0
二:逻辑异或满足交换律、结合律,即对于题目中的数组可以看成是先把元素排好序相同的放在一块进行异或运算,与元素的参加运算的顺序无关。
逻辑异或的运算真值表:
输入
|
运算符
|
输入
|
结果
|
1
|
⊕
|
0
|
1
|
1
|
⊕
|
1
|
0
|
0
|
⊕
|
0
|
0
|
0
|
⊕
|
1
|
1
|
代码:
public class Solution { public int singleNumber(int[] nums) { int ans = 0; for(int n:nums){ ans ^= n; } return ans; } }
Leetcode 136. Single Number
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。