位运算-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; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树