136.Single Number I
来源:互联网 发布:多益网络账号找回 编辑:程序博客网 时间:2024/04/29 14:45
int singleNumber(int* nums, int numsSize) { int a,b,i,j,c,label=0; if(numsSize==1){ return nums[0]; }else{ for(i=0;i<numsSize;i++){ a=nums[i]; for(j=0;j<numsSize;j++){ b=nums[j]; if((a==b)&&(i!=j)){ break; } if((a!=b)&&(j==numsSize-1)){ c= a; label=1; break; } } if(label==1){ break; } } } return c;}int main(){ int numsSize; int nums[10]; int i,z; scanf("%d",&numsSize); for(i=0;i<numsSize;i++){ scanf("%d",&nums[i]); } z=singleNumber(nums,numsSize); printf("%d",z); getchar(); return z;}
singer number i 我这个超时了,从测试用例【1】到【1,1,2】到【1,2,-1,2,1】慢慢调,终于调通了,但是超时了
看到正确答案ac后真的是惊奇这万千世界 竟然有方法可以顶替掉我这么多行的代码,师兄看我想了两天就说快去看看别人的方法把,你这样没用的
果然,惊奇之后是想吐,什么鬼,怎么能想的到
好了看一下这万能的XOR吧
int singleNumber(int* nums, int numsSize) { int result=0; int i; for(i=0;i<numsSize;i++){ result^=nums[i]; } return result;}
原理就是这样的 (摘自http://www.powerxing.com/leetcode-single-number/)
因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果:
(2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5
就把只出现了一次的元素(其余元素均出现两次)给找出来了!
0 0
- 136.Single Number I
- 136. Single Number I-II-III
- Single Number I & II
- Single Number I
- Single Number I & II
- Single Number I & II
- [LeetCode]Single Number I
- Single Number I & II
- single number i
- 136:Single number I
- [Leetcode] Single Number I | Single Number II
- LeetCode:Single Number I && II
- LeetCode Single Number I & II
- [Leetcode]Single Number I&II
- LeetCode 136:Single Number I
- 【leetcode】【136】Single Number I
- SINGLE NUMBER I & II & III
- Single Number I II III
- 细究C++中const_iterator与const迭代器的区别
- Android-OpenCV的配置教程
- Hadoop Yarn详解
- 三种方式实现fibonacci数列
- Android还不错的项目
- 136.Single Number I
- lx009字符串的处理
- 七牛云存储____代码和资源同步到百度云
- bzoj2006NOI2010超级钢琴 主席树+优先队列
- 一句话后门中eval和assert的区别
- 学习笔记-Spring入门(一)
- Q72:渲染方程(Rendering Equation)
- 第一篇 介绍
- 这几日学习的东西