您的位置:首页 > 理论基础 > 数据结构算法

位运算-Single Number (求一个给定数组的出现次数为单数的那个数)

2016-05-08 21:33 417 查看

题目描述:

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)  (不会因为n的大小而决定)参考了网上的说使用位运算。

复习一下四种位运算:
1,非:0变1,1变0.
2,与:只有两个1时,结果才为1.
3,异或:相同为0,不同为1.
4,或:只有两个为0,结果才为0.
任何数字和0异或的结果为那个数字本身。如00 ^ 11 结果为 11.所以把前面出现两次的数字异或最后肯定为0与单数次数的那个数异或。

代码(java):

public class SingleNumber {
public static void main(String[] args){

int[] nums = {1,1,2,3,3,2,5,6,6};

singleNumber(nums);

}

public static int singleNumber(int[] nums) {

int result = 0;

for(int i = 0 ; i < nums.length ; i++){
result = result ^ nums[i];
}

System.out.println(result);
//满足leetcode的格式~
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息