给定一个数组,其中只有一个数出现一次,别的数都出现3次,找出这个数
2016-10-11 22:07
447 查看
题目描述
给定一个数组,其中只有一个数x出现一次,别的数都出现3次,找出这个数x。(线性时间复杂度)思路
这个用异或不可以。可以设置一个长度为32的int数组。统计每位上出现1的次数,如果次数能被3整除,说明x该位上为0,否则为1
java代码实现
import java.util.Scanner; public class AppearOnce3 { public static void main(String[] args){ Scanner scan = new Scanner(System.in); String s = scan.nextLine(); String[] strArr = s.split(" "); int len = strArr.length; int[] nums = new int[len]; for(int i = 0; i < len; i++) nums[i] = Integer.parseInt(strArr[i]); System.out.println(appearOnce(nums)); } public static int appearOnce(int[] nums){ int len = nums.length; int[] bits = new int[32]; for(int i = 0 ; i < len; i++) for(int j = 0; j < 32; j++) bits[j] += ((nums[i]>>j)&1); int result = 0; for(int i = 0 ; i < 32; i++){ if(bits[i] % 3 == 1) result += 1 << i; } return result; } }
相关文章推荐
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字(数组指针的方法)
- 数组中所有数都出现了3次,除了其中一个数,找出这个数
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这个数字
- 序列中只有一个数出现了一次,其他均出现了两次,找出只出现过一次的这个数
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
- 一组数据中只有一个数字出现一次,其他数成对出现,找出这个数
- 给出101个整数数,这101个数是1~100中的数,其中只有一个是出现两次的数,要求找出这个数。
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 【c语言】给一组数,只有一个数只出现了一次,其他所有数都是成对出现的。找出这个数
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 给定一个字符数组,从中找出第一个只出现一次的字母
- 一个java数学题,给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 序列中只有一个数出现了一次,其他均出现了两次,找出只出现过一次的这个数
- 3.有一个整形数组,只有一个数字出现了一次,请编写程序判断这个数字(大概题目就是这样的,记不太清了)
- 整型数组处理算法(十)给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]
- C语言:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 一个全是32位整数的大数组,除了其中一个数字出现2次外,其余的数字都出现了3次。如何找出那个只出现了两次的数字?
- (bitmap)给定一个字符串数组,从中找出第一个只出现一次的字母