C语言 数组中只出现一次的值
2015-05-19 10:56
190 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
#include<iostream> using namespace std; int findFirstBit1(int num){ int indexBit1 = 0; while((num & 1) == 0 && indexBit1 < 32){ num = num >> 1; indexBit1++; } return indexBit1; } bool isBit1(int num, int indexBit1){ num = num >> indexBit1; return num & 1; } void findFirstAppearOne(int *arr, int length, int &num01, int &num02){ if(arr == 0 || length <= 0){ return ; } int result = 0; for(int i=0; i<length; i++){ result ^= arr[i]; } int indexBit1 = findFirstBit1(result); for(int j=0; j<length; j++){ if(isBit1(arr[j], indexBit1)){ num01 ^= arr[j]; }else{ num02 ^= arr[j]; } } } int main(){ int arr[8] = { 1, 2, 1, 3, 2, 4, 5, 5 }; int num01 = 0; int num02 = 0; findFirstAppearOne(arr, 8, num01, num02); printf("%d\n", num01); printf("%d\n", num02); return 0; }
相关文章推荐
- C语言---一组数组中只有两个数字出现一次,其他数字都是成对出现的,请找出这两个数字。
- 【C语言】一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字!
- 整型数组里只出现一次的数字--[c语言笔试题]
- C语言- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现。
- C语言:求一个数组中只出现一次的两个数
- 给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法
- 在字符串中找出第一个只出现一次的字符。经典C语言例题
- 剑指offer(20)-数组中只出现一次的数字
- 一个整型数组中数字出现两次,但是只有2个数字出现一次,求解这两个只出现一次的数的代码
- 第一个只出现一次的字符+数组中重复的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 两种方式找出数组中只出现一次的数字
- 在字符串中找出第一个只出现一次的字符。经典C语言例题
- 【白话经典算法系列之十七】 数组中只出现一次的数
- 剑指Offer之 - 数组中只出现一次的数字
- 面试题40:数组中只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 面试题:数组中唯一只出现一次的数字
- 编程算法 - 数组中只出现一次的数字 代码(C)