【LeetCode】002 Single Number 寻找单身狗
2016-03-01 09:55
190 查看
【题目】
Given an array of integers, every element appears twice except for one. Find that single one.在一个数组中,每个数字都有另一个与之相同,只有一个例外,请找出它。
【解析】
一、我的方法(即最笨的方法):把每个数字都检索一遍,检索不到相同的就输出。
从数组第一个数字开始,从后往前检索,一直到被检索数字,如果发现两个数字编号相同则输出。否则检索数组的第二个数字,以此循环。
程序如下:
int singleNumber(int* nums, int numsSize) {
if(numsSize==1)
return nums[0];
else
for(int i=0; i
{
for(int j=numsSize-1; j>i; j--)
if(i==j)
return nums[i];
}
}
二、Genius的办法(评论是这么说的,看完我也表示只有这个词可以形容。。。)
先是百度百科:
异或,英文为exclusive OR,或缩写成xor
异或是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。
其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
过程:
令result变量为0,将它与数组中每个量进行异或运算,再赋值给result。一个数与0异或仍是它本身,两个相同的数异或为0。因此,如果result和两个相同的数异或之后,则值不变,仍为0。又因为异或运算满足交换律,因此最后result的值即为只进行了一次异或运算的数,即我们要找的单身狗。
Genius!!
【程序】
int singleNumber(int* nums, int numsSize) {int result = 0;
for(int i=0; i
result^= nums[i];
return result;
}
相关文章推荐
- 获取视频的缩略图,已经调用系统的播放器播放视频
- 机器学习中的相似性度量
- tomcat架构分析 (JNDI配置)
- EF泛型封装CRUD
- leetcode 136 Single Number, 260 Single Number III
- 计算两个NSDate之间,相隔多少秒数
- git push 403
- java 静态代码块和构造方法执行优先顺序
- java 数据结构和存储方式
- Java数组
- event.keyCode用法及列表
- exec Function
- 高仿人人网客户端Android版项目源码
- Ajax显示隐藏
- php和java的memcached使用的兼容性问题解决过程
- 高仿人人网客户端Android版项目源码
- event.keyCode用法及列表
- 面向对象_python
- java定时调度器解决方案分类及特性介绍
- Java 利用replaceAll 替换中括号