🤖
AI审核中

READING IN THE WILD · 读一篇手记

牛客 NC227 找出只出现一次的数字

文章摘要

本文介绍了“只出现一次的数字(二)”题目:在一个整数数组中,唯一出现一次的数其余均出现三次,要求找出该数。数据规模 up to 10⁵,整数范围为 32 位有符号。给出一种位计数解法:用长度为 32 的数组统计每个位上 1 的出现次数,对每个位取模 3,余 1 的位即为唯一数的对应位,最后合成结果返回。代码实现基于 Java,时间 O(n·32),空间 O(32)。

题目链接:https://www.nowcoder.com/practice/85cb47fc0c6c483fab7e5cefab54d9e5

题目描述

给定一个整数数组,数组中有一个数出现了一次,其他数出现了三次,请找出只出现了一次的数。

数据范围:数组大小满足 1≤n≤105 ,数组中每个元素大小满足 -2^31 ≤ val ≤ 2^31−1

示例 1:

输入:[1]
返回值:1

示例 2:

输入:[1,2,2,2]
返回值:1

解题代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int singleNumber (int[] nums) {
        // write code here
        int[] t = new int[32];
        for (int num : nums) {
            for (int i = 0; i < 32; i++) {
                t[i] += (num >> i) & 1;
            }
        }
        int ans = 0;
        for (int i = 0; i < 32; i++) {
            if (t[i] % 3 == 1) {
                ans |= (1 << i);
            }
        }
        return ans;
    }
}

0 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 0

头像
 0 条评论