概述
题目描述
给定一个数组,其中只有一个数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次,找出这个数的全部内容,希望文章能够帮你解决给定一个数组,其中只有一个数出现一次,别的数都出现3次,找出这个数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复