我是靠谱客的博主 美满荔枝,最近开发中收集的这篇文章主要介绍给定一个数组,其中只有一个数出现一次,别的数都出现3次,找出这个数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

给定一个数组,其中只有一个数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次,找出这个数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部