首页 > 其他分享 >260. 只出现一次的数字 III

260. 只出现一次的数字 III

时间:2023-10-16 22:34:00浏览次数:32  
标签:tmp set num 数字 nums int 异或 260 III

题目

题解

题解一

  • 直接使用 HashSet 判断
class Solution {
    public int[] singleNumber(int[] nums) {

        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (set.contains(num)) {
                set.remove(num);
            } else {
                set.add(num);
            }
        }
        int[] res = new int[2];
        int index = 0;
        for (Integer i : set) {
            res[index++] = i;
        }
        return res;
    }
}

题解二

  • 对数组所有元素求异或,得到的值为那两个不同元素的异或结果
  • 明确那两个数肯定不同,所以肯定有的位数异或后结果为 1
    • 假如第 x 位异或的结果为 1,即所有数的 x 位异或结果为 1
    • 找到 x 的最小值
  • 现在数组中只有两类数:x 位为 0 的,和 x 位为 1 的,并且这两个不同的数的 x 位还不同
  • 通过 & 操作,将数组氛围两类
  • 最后问题拆解为 136.只出现一次的数字
class Solution {
    public int[] singleNumber(int[] nums) {

        // 两个不同数的异或值
        int tmp = 0;
        for (int num : nums) {
            tmp = tmp ^ num;
        }
        // 两个数不同,tmp 肯定不为 0,得到最后为 1 的位
        // 4  -> 100
        // -4 -> 11111111111111111111111111111100
        // 4 & -4 -> 100
        int fg = tmp & -tmp;

        // 数组里面所有数的该位要么是 0,要么是 1,且与运算之后最终结果是 1
        int res1 = 0;
        int res2 = 0;
        for (int num : nums) {
            if ((num & fg) == 0) {
                res1 = res1 ^ num;
            } else {
                res2 = res2 ^ num;
            }
        }
        return new int[]{res1, res2};
    }

}

本文由mdnice多平台发布

标签:tmp,set,num,数字,nums,int,异或,260,III
From: https://www.cnblogs.com/liuzhihang/p/17768551.html

相关文章

  • [LeetCode] 260. 只出现一次的数字 III
    题目给你一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。思路可以用哈希表um映射存储每一个输入的值,输入一次就给......
  • JS 数字类型的加减乘除, 四舍五入保持精度
    Number.prototype.toFixed=function(d=0){ letchangeNum=this+''//把数字转为字符串 if(changeNum.indexOf('-')!=-1){//判断是否是负数 changeNum=Math.abs(Number(changeNum))} changeNum=(Math.round(Number(changeNum)*Math.......
  • 转载 | [AcSaveAsType -cad版本代号对应数字 ] & [AutoCAD的DWG文件格式版本代号列
    1. AcSaveAsType-cad版本代号对应数字 doc.SaveAs("D:\AutoCAD\1.dwg",61)#将当前文件另存为PyAutoCAD_SaveAs.dxf;#此时,程序关闭当前文件,将PyAutoCAD_SaveAs.dxf切换为当前文件。#61表示另存为文件的类型是AutoCAD2013DXF,常用类型如下:#12AutoCAD2000DWG(......
  • 山海鲸数字孪生解决方案:智慧水利管理的未来
    解决方案背景水资源的管理和利用对于人类社会的持续发展至关重要。随着全球气候变化、城市化进程和资源稀缺性的威胁日益增大,水利管理面临着前所未有的挑战。数字孪生技术,作为一项革命性的创新,为解决这些挑战提供了新的途径。山海鲸数字孪生技术以其独特的技术优势,为水利管理带来......
  • 数字电路硬件设计系列(十七)之上电时序控制电路
    1简介上电时序,也叫做Power-upSequence,是指电源时序关系。下面就是一系列电源的上电的先后关系:2方案介绍2.1电容实现延时采用不同的电容来控制上电延时时间的长短,具体的电路见下图:这种上电时序控制的方式,电路结构简单,但是延时时间难以精确的控制。在FPGA的电源......
  • 数字人论文:Audio-Driven Facial Animation by Joint End-to-End Learning of Pose an
    老规矩.直接第三章3.端到端网络结构给一个audio短窗口,也就是片段.我们预测窗口中间时刻的面部表情.我们把表情看做一个全端点的向量(后面我们会看这是什么的一种刻画面部)一旦我们网络训完,我们回各个时间点同时生成,并行.即使不需要过去的帧画面,依然生成很稳定的......
  • 137. 只出现一次的数字 II
    1.题目介绍2.题解2.1哈希表思路同本系列题I,不过多赘述代码classSolution{public:intsingleNumber(std::vector<int>&nums){std::unordered_map<int,int>map;for(intnum:nums){map[num]++;}for(autopair......
  • 137. 只出现一次的数字 II
    题目题解方法一直接用哈希表出现3次则从哈希表移除,最后剩下的就是结果classSolution{publicintsingleNumber(int[]nums){Map<Integer,Integer>map=newHashMap<>();for(intnum:nums){Integerinteger=map.getOrDe......
  • P2607 [ZJOI2008] 骑士
    P2607[ZJOI2008]骑士[P2607ZJOI2008]骑士-洛谷|计算机科学教育新生态(luogu.com.cn)目录P2607[ZJOI2008]骑士题目大意思路code题目大意给你一个\(n\)个点,\(n\)条边的基环树森林。你可以从中选择若干个点,满足两两之间不存在边相连。每个点有一个权值,请问最大的......
  • 136. 只出现一次的数字
    1.题目简介2.题解本题思路参考了某位大大的题解,链接:https://leetcode.cn/problems/single-number/solutions/5118/xue-suan-fa-jie-guo-xiang-dui-yu-guo-cheng-bu-na-y/2.1数组/哈希表解法思路这里很容易想法就是成对存储:数(键)和数出现的次数(键值),所以使用数组和哈希表存储......