136. Single Number
来源:互联网 发布:上海自贸区失败知乎 编辑:程序博客网 时间:2024/06/08 09:29
题目
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?
一个整型队列。里面的每个元素都会出现两次出过某一个整数。找到出现一次的那个整数。
时间复杂度:线性
不使用额外的存储空间
初始想法:
一开始的想法是遍历这个数组,找到出现一次的那个数。但是可以想到时间复杂度肯定不是常数,还需要额外申请一个存放每个数出现次数的数组。
int singleNumber(int* nums, int numsSize) { //记录这个数组中的每个数的个数,每个数的个数初始化为0,当为1时表示这个数出现2次 int *counts=(int *)malloc(sizeof(int)*numsSize); for(int i=0;i<numsSize;i++){counts[i]=0;}//全部初始化为0,不能写成int counts[numsSize]={1};这样会使得这个数组第一个数为1,然而后续的数为0 int i,j; for(i=0;i<numsSize;i++) { if(counts[i]==1) continue; for(j=i+1;j<numsSize;j++) { if(counts[i]==1) break; if(nums[i]==nums[j]) { counts[i]=1; counts[j]=1; } } } for(i=0;i<numsSize;i++) { if(counts[i]==0) return nums[i]; } }
然后,通过看别人的方法,学习到了一个可以满足题目要求的方法。
利用 “异或”。异或满足 交换律 和 结合律
性质 1:交换律 a ^ b = b ^ a,
结合律 A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
性质 2:0 ^ a = a。
于是利用交换律可以将数组假想成相同元素全部相邻,于是将所有元素依次做异或操作,相同元素异或为0,最终剩下的元素就为Single Number。时间复杂度O(n),空间复杂度O(1)
class Solution {public: int singleNumber(int A[], int n) { //异或 int elem = 0; for(int i = 0; i < n ; i++) { elem = elem ^ A[i]; } return elem; }};
0 0
- 136. Single Number&137. Single Number II
- 136. Single Number
- LeetCode 136. Single Number
- 136.Single Number
- [Leetcode] 136. Single Number
- LeetCode 136. Single Number
- 136.Single Number
- 136. Single Number
- 136.Single Number
- 【leetcode】136. Single Number
- 【LeetCode】136. Single Number
- Leetcode 136. Single Number
- leetcode 136. Single Number
- leetcode 136. Single Number
- 136. Single Number LeetCode
- LeetCode 136. Single Number
- LeetCode 136. Single Number
- [LeetCode]136. Single Number
- 【编程语言】Java 软件工程师的一天
- 随机生成限定长度的账号
- 提高篇项目5——当年第几天
- 第三方登陆 友盟版
- Github上托管的最实用六大Android开源框架整理
- 136. Single Number
- 那些年,我们一起敲过的字符串
- hdoj 2051 Bitset (进制转换)
- API接口问题
- python中 __name__及__main()__的妙处
- https模式下记住git密码
- @property (nonatomic, strong) NSString *str有什么问题
- android 左边框圆角的实现
- uva_259_Software Allocation