您的位置:首页 > 其它

给定一个数组,其中只有一个数出现一次,别的数都出现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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐