题解 | #出现一次的数字#
出现一次的数字
https://www.nowcoder.com/practice/0bc646909e474ac5b031ec6836a47768
出现一次的数字
问题描述
现在有一个整数类型的数组,数组中素只有一个元素只出现
一次
,其余的元素都出现两次
。
分析
题目中,给出的数组中,只有一个元素且只出现一次,其他元素都出现两次,根据题意,应该是使用异或来写。
[一开始想的是使用Map,那样效率太差了,而且明显不符合题意]
异或的运算规律
X | Y | Result |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
因此,数组中如果一个数出现两次,则必然是0,只有那个一次的是1,给出一个式子
1⊕0⊕1⊕0⊕0⊕1⊕1⊕1⊕1=?
其中,0是奇数个,1是偶数个,偶数个会异或为0,因此只会剩下奇数个的那个数字,也就是
1⊕0⊕1⊕0⊕0⊕1⊕1⊕1⊕1=0
完整代码
import java.util.*; public class Solution { /** * * @param A int整型一维数组 * @return int整型 */ public int singleNumber (int[] A) { // write code here int result = 0; for(int i = 0;i<A.length;i++){ result ^= A[i]; } return result; } }