1.只出现一次的数字
给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。
分析:
1.利用异或位运算的特性int singleNumber(vector & nums) { int count=0; for(int i=0;i
2.只出现一次的数字 II
给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次。求出那个只出现一次的数。
分析:
1.只有一个元素出现一次,其他元素出现三次2.出现三次的元素每位上的1的和为3的倍数int singleNumber(vector & nums) { int result=0; for(int i=0;i<8*sizeof(int);i++) { int count=0; for(int j=0;j>i)&1; } result+=(count%3)<
3.只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其他所有元素均出现两次。 找出只出现一次的那两个元素
给定 nums = [1, 2, 1, 3, 2, 5]返回 [3, 5].
分析:
1.两次出现的数在异或中抵消,留下两个不同出现一次的数2.找到这两个数结果位上的第一个1的index3.以index区分这两个数,并重新将数组分为两个子数组,这两个数分别在这两个数组中vector singleNumber(vector & nums) { vector result(2); int sum=0,j,low=0,high=nums.size()-1; for(int i=0;i>j)&1)break; while(low >j)&1))low++; while((nums[high]>>j)&1)high--; if(low