首页 > 其他分享 >力扣---137. 只出现一次的数字 II

力扣---137. 只出现一次的数字 II

时间:2023-10-15 11:00:26浏览次数:49  
标签:--- temp nums int 32 元素 ++ II 力扣

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

 

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

 

提示:

  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

可以想到的是,所有数字的每一位进行累加,答案对应等于 0 的位置 1 出现次数是 3 的倍数。

可以用一个32 的数组来模拟答案,将 nums 中所有元素中每一个 1 放到数组中,最后对数组中所有元素对 3 取余,剩下的 0 和 1 就是答案的二进制。

class Solution {
    public int singleNumber(int[] nums) {
        int[] ans = new int[32];
        for (int x : nums) {
            int temp = 1;
            // 遍历获取每一位的字母
            for (int i = 0; i < 32; i++) {
                int tem = (x & temp);
                int temp1 = 1;
                // 如果不等于 0,则说明 x 的第 i 位是 1
                if (tem != 0) {
                    ans[i]++;
                }
                temp <<= 1;
            }
        }
        int res = 0;
        // 将模拟数组转为数字
        for (int i = 0; i < 32; i++) {
            int x = ans[i];
            x %= 3;
            if (x == 1) {
                int temp = 1;
                temp <<= i;
                res ^= temp;
            }
        }
        return res;
    }
}

 每次计算完每一位后进行下一位的计算,优化。

class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        int temp = 1;
        for (int i = 0; i < 32; i++) {
            int count = 0;
            for (int x : nums) {
                if ((x & temp) == temp) {
                    count ++;
                }
            }
            if (count % 3 == 1) {
                res ^= temp;
            }
            temp <<= 1;
        }
        return res;
    }
}

 

 

标签:---,temp,nums,int,32,元素,++,II,力扣
From: https://www.cnblogs.com/owlwu/p/17765376.html

相关文章

  • 2023-2024-1 20231312 《计算机基础与程序设计》第三周学习总结
    作业信息|这个作业属于哪个课程|<班级的链接>2023-2024-1-计算机基础与程序设计|||----这个作业要求在哪里|---<作业要求链接>2023-2024-1计算机基础与程序设计第一周作业-|----||这个作业的目标|《计算机基础概论》第2,3章《C语言......
  • kubernetes client-go 避坑
    原文链接:https://www.cnblogs.com/gaorong/p/16939111.htmlinformercache中的数据是只读的,任何修改都先deepcopyinformercache中的数据是只读的,任何修改都应该先deepcopy出来,然后提交apiserver,利用apiserverinformerevent重新同步回cache中。如果直接修改cache中的数据......
  • 【ARMv8基础篇】CCI-400控制器简介
    CCI(CacheCoherentInterconnect)是ARM中的cache一致性控制器。CCI-400将互连和一致性功能结合到一个模块中。它支持多达两个ACE主节点的连接,例如:Cortex®-A7processorCortex-A15processorCortex-A17processorCortex-A53processorCortex-A57processorCCI-400还支持......
  • 文泰刻绘安装版下载-文泰刻绘安装版免费下载 详细安装流程
    文泰刻绘2010功能1、工具这个软件中会有很多的绘图工具可以使用,能够帮助用户们更加方便的绘制图片,这些工具非常好用。2、界面有着一个很赶紧的绘画界面,能够让用户们更好的使用里面的功能,在查看图片的时候可以更加明显。3、调整能够帮助用户们调整图片的位置,让用户们可以通过这个软......
  • r - How do I order by row.names in dataframe R语言 排序
     new_df<-df[order(row.names(df)),]REF:https://stackoverflow.com/questions/20295787/how-can-i-use-the-row-names-attribute-to-order-the-rows-of-my-dataframe-in-rhttps://stackoverflow.com/questions/25194196/how-do-i-order-by-row-names-in-dataframe......
  • 1987-2008年考研数二真题全面解析
    1987|1988|1989|1990|1991......
  • vc---cl编译器的选项
    VC(VisualC++)编译器是MicrosoftVisualStudio集成开发环境中的C++编译器,用于编译和构建C++应用程序。VC编译器有许多编译选项,用于控制编译过程和生成的可执行文件。以下是一些常见的VC编译器选项:编译选项:/c:只进行编译,不进行链接。/O1,/O2,/Ox:启用不同级别的优化。/Gm:生成函......
  • 【科研02】【代码复现】【代码分享】TransUnet-RoadExtract 道路提取【数据预处理-ras
    目录1.数据处理dataprocess1.1.类型转换RastertoPng1.2.边缘填充Resize1.2.1.填充Resizeimage1.2.1.填充Resizelabel1.3.批量裁剪Clip1.4.波段缩减3bandsto1band1.5.筛选图像Choose1.6.转换格式Transformtonpz1.7.读取列表ReadFilesToList1.数......
  • CF237D T-decomposition
    原题链接链式前向星,他来了通过观察发现,每个集合的大小最小为\(2\),显然我们需要构造一种方案使得每一个集合的大小都为\(2\),这样是最优的。每个集合大小为\(2\),等价于把每条边转换成新树上的一个点,一共\(n-1\)边,对应\(n-1\)个集合,每个集合的点对在dfs的时候输出每一......
  • 2023-2024-1 20231410刘珈岐 《计算机基础与程序设计》第3周学习总结
    2023-2024-120231410《计算机基础与程序设计》第3周学习总结•作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03这个作业的目标自学计算机科学概论第......