找出数组中只出现一次的元素
2016-12-05 21:50
141 查看
#include<stdio.h> int find(int arr[],int sz) { int i=0; int ret=0; for(i=0; i<sz; i++) { ret^=arr[i]; } return ret; } int main() { int arr[]={1,2,3,4,5,1,2,3,4}; int sz=0; int ret=arr[0]; sz=sizeof(arr)/sizeof(arr[0]); ret=find(arr,sz); printf("%d\n",ret); system("pause"); return 0; }
在这里我们主要运用异或运算,那么首先就得了解异或运算
异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。其运算法则为a异或b=a'b或ab'(a'为非a)。真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。简单点说就是异或的两个值'相同为假,不同为真'。异或运算法则
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
4. a ^ b ^ a = b.
根据以上法则我们可以推广到更多的数进行异或,对于程序中的数据,可以看成 1^2^3^4^5^1^2^3^4,然后根据交换法则可以变为1^1^2^2^3^3^4^4^5,两两相同的异或为0,0和任何数异或就是它本身,所以就可以找出单独出现一个的元素。
相关文章推荐
- 算法:数组找出2个只出现一次的数字(其他元素出现两次)
- 用线性时间复杂度实现找出数组中出现一次的元素
- 找出一个数组中只出现过一次的元素
- Single Number 数组中除了某个元素出现一次,其他都出现两次,找出这个元素
- Leetcode540. 二分查找找出数组中只出现一次的元素
- 用线性时间复杂度实现找出数组中出现一次的元素
- leetcode_260. Single Number III 数组中找出两个只出现一次的元素
- Leetcode260. 找出数组中只出现一次的两个元素
- 一个数组有除了两个元素只出现一次,其他元素全部都出现了两次,请找出只出现一次的两个元素,并输出
- 用线性时间复杂度实现找出数组中出现一次的元素
- 如何快速找出一个数组中只出现一次的两个数,其他元素出现两次?保证时间复杂度O(n),空间复杂度O(1)
- Single Number--找出数组中唯一的一个只出现一次的元素
- 用线性时间复杂度实现找出数组中出现一次的元素
- 用线性时间复杂度实现找出数组中出现一次的元素
- java版的小明的筷子,主要是找出数组中只出现一次的元素
- 数据结构面试题总结5——数组:找出数组中唯一一个出现一次的元素
- leetcode-singleNum2 找出一个数组中只出现过一次的元素
- 1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次
- 找出数组中2个只出现了一次的数字
- 面试题精选(82):找出数组中只出现一次的3个数