码迷,mamicode.com
首页 > 其他好文 > 详细

lc 只出现一次的数字 (异或运算)

时间:2018-07-14 18:46:17      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:for   oid   除了   return   数组   数字   ali   元素   int   

 

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

说明:

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

 

异或解法:


public class Solution2 {
public int singleNumber(int[] arr) {
// invalid check
if (arr.length == 0) {
return -1;
}
int result = 0;
for (int i = 0; i < arr.length; i++) {
result = result ^ arr[i];
}
return result;
}

public static void main(String[] args) {
int[] arr = { 0, 1, 1, 2, 2, 3, 0 };
System.out.println(new Solution2().singleNumber(arr));
}
}

注释:一个整数和它本身异或之后得到值是0,0与其他整数异或得到的是这个整数本身

异或运算的两个法则:

①. a ^ b = b ^ a

②. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c 

真 ^  假 = 真  假 ^  真 = 真  假 ^  假 = 假  真 ^  真 = 假

 

lc 只出现一次的数字 (异或运算)

标签:for   oid   除了   return   数组   数字   ali   元素   int   

原文地址:https://www.cnblogs.com/effort1998/p/9310535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!