Description

Given 2*n + 1 numbers, every numbers occurs twice except one, find it.

Example

Given [1,2,2,1,3,4,3], return 4

刷题中,遇到一个比较有趣的题目,记录一下。

题目给了2*n+1个数,其中有n组数成双出现,只有一只单身贵族。那么如何找到这个数呢?一开始想了一个比较笨的方法,先将数组排序,看连续出现的两个数是否一样,不一样的就是要找的那个。

方法一:

public class Solution {
/**
* @param A: An integer array
* @return: An integer
*/
public int singleNumber(int[] A) {
// write your code here
Arrays.sort(A);
if(A.length==1){
return A[0];
}
for(int i=0;i<A.length;i+=2){ //注意i迭代数为2
if(i==A.length-1)
return A[i]; //如果是最后一个,直接返回该值
if(A[i]!=A[i+1])
return A[i];
}
return 0;
}
}

方法二:

在网上找到的一种更巧妙的方法,利用“异或”运算的一个性质:(1)一个数与另外两个相同的数异或之后,还等于这个数(2)异或运算的可交换性

例如: 2 XOR 1=3       3 XOR 1=2      也可以描述为   2 XOR (1 XOR 1)=2 XOR 0=2.

对于本题来说,把所有数XOR得到的结果就是那只“单身贵族”:

public class Solution {
/**
* @param A: An integer array
* @return: An integer
*/
public int singleNumber(int[] A) {
//根据题目的意思,A数组中至少有一个数
int res=A[0];
for(int i=1;i<A.length;i++){
res^=A[i];
}
return res;
}
}

最新文章

  1. ABP总体介绍
  2. openresty 前端开发入门三之JSON篇
  3. App的启动过程
  4. python窗体——pyqt初体验
  5. nmap 高级扫描用法
  6. linux代码段,数据段,BSS段, 堆,栈(二)
  7. linux-网卡故障
  8. nyoj 69 数的长度
  9. poj 2739 Sum of Consecutive Prime Numbers 小结
  10. perl 读取Excel写入txt 乱码
  11. Java 包与类的命名(util、service、tool、dao )区别
  12. openvpn 客户端配置
  13. vue中 用媒体查询 空置根节点字体大小
  14. JAVA 文件与base64之间的转化, 以及Web实现base64上传文件
  15. 常用C字符串函数
  16. oracle卸载清除注册表(彻底卸载)
  17. DataGridView使用技巧十三:点击列头实现升序和降序排序
  18. [Android] 开发第九天
  19. OA与ERP集成 可行?
  20. 关于mysql中[Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails

热门文章

  1. 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)
  2. 【AngularJS学习笔记】Java Script &quot;use strict&quot; 严格模式
  3. Hibernate连接各种数据库的配置
  4. IOS 文件名获取简洁方式
  5. STL专题&#183;vector容器
  6. 设计四个线程,其中两个线程每次对j增加1,另外两个线程对j每次减1,写出程序
  7. Java 序列化与反序列化(Serialization)
  8. MySQL 参数slave_pending_jobs_size_max设置
  9. linux 编译安装pureFTP
  10. PHP基础2--基本语法