数组中数字出现的次数
问题陈述
一个整型数组 nums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例:
1 2
| 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]
|
思路分析
你知道异或吗?
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public int[] singleNumbers(int[] nums) { int sum=0; for (int i = 0; i <nums.length ; i++) { sum^=nums[i]; } int first = 1; while((sum&first)==0){ first=first<<1; } int result[]=new int[2]; for(int i=0;i<nums.length;i++){ if((nums[i]&first)==0){ result[0]^=nums[i]; } else{ result[1]^=nums[i]; } } return result; }
|