题目:
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?
来源:http://oj.leetcode.com/problems/single-number/
思路:
异或运算
1.a ^ a = 0
2. a^0=a
3. a ^ b = b ^a
4. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
5. a ^ b ^ a= b.
从上面几个算式可以知道:因为数组中其他元素都出现2次,只有一个出现1次,所以循环整个数组,依次异或,结果就肯定是那个只出现1次的数字。
C++ AC代码:
class Solution {
public:
int singleNumber(int A[], int n) {
int s = A[0];
for( int i=1; i<n; ++i)
s^=A[i];
return s;
}
};
运行时间:44ms
测试代码:
/*
*Created by RogerKing
*Email:jin_tengfei@163.com
*/
#include <iostream>
using namespace std;
int singleNumber(int A[], int n)
{
int s = A[0];
for( int i=1; i<n; ++i)
s^=A[i];
return s;
}
void display(int A[],int n)
{
cout<<"The array:";
for( int i=0; i<n ; i++)
cout<<A[i]<<" ";
cout<<endl;
}
int main()
{
int A[9]={1,2,3,4,5,4,3,2,1};
display(A,9);
cout<<"The single one:"<<singleNumber(A,9)<<endl;
return 0;
}
PS:感觉自己水平还低的可以啊,先从LeetCode中AC Rates最高的开始做吧,好好研究《C++ Primer》,好好准备。
本文针对LeetCode上的Single Number问题提供了解决方案,利用异或运算特性在O(n)的时间复杂度内找出数组中唯一出现一次的数字,并附带C++实现代码。

300

被折叠的 条评论
为什么被折叠?



