LeetCode ——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)的时间复杂度找出这个数,并不要借助额外的存储空间。
分析:
要求这么高,就用位运算大发吧,异或运算,出现两次的会抵消,最终结果就是只出现一次的数。
AC代码:
class Solution {
public:
int singleNumber(int A[], int n) {
for(int i=1;i!=n;i++)
A[0]^=A[i];//不让用额外的内存,那么就用A[0]来存储中间值吧
return A[0];
}
};
有时候位运算真的有奇效!