位运算-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),并且空间复杂度为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;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值