首页 > 其他分享 >数组中找出只出现一次的两个数字

数组中找出只出现一次的两个数字

时间:2023-02-14 11:13:45浏览次数:56  
标签:找出 遍历 两个 数字 int 异或 数组

问题:剑指 Offer 56 - I. 数组中数字出现的次数 - 力扣(LeetCode)

该问题巧妙地利用了异或运算的性质,两个相同的数字相异或为0,遍历完所有的数字后,只剩下两个不相同的数字的异或值,n = x^y;

再利用 n为1的首位,计算出这个值,将其遍历数组,进行 与运算,由其结果为0或1 ,得到两个数组;

对两个数组进行分别遍历异或,最后得到的值即为只出现一次的值

时间复杂度:O(N);空间复杂度:O(1);

class Solution {
public:
    vector<int> singleNumbers(vector<int>& nums) {
        int n = 0x0;
        for(auto num:nums){
            n ^= num;//遍历异或所有数字;
        }
        int m = 0x1;
        while((n & m) == 0){
            m <<= 1;//找到首位为1的位,此位代表两个数字值不相同的位
        }
        int x=0,y=0;
        for(auto num : nums){
            if(m & num) x ^= num;
            else y ^= num;
        }
        return vector<int> {x,y};

    }
};

 其中,找出首位为1的值m 可以简化代码为: 

m = n & (~n +1)

或者

m = n -(n & (n -1))

 

标签:找出,遍历,两个,数字,int,异或,数组
From: https://www.cnblogs.com/xuan01/p/17118941.html

相关文章

  • C经典 关于一维数组指针
    说明:1)一维数组指针表示方法int*p=a而非int*p=&a也可int*p=&a[0]表示2)p+1或a+1表示的是指向下一个地址#include<stdio.h>intmain(intargc,const......
  • C经典 一维数组指针解析
    #include<stdio.h>intmain(intargc,constchar*argv[]){//inta[]={1,2,3,4};int*pa[]={&a[0],&a[1],&a[2],&a[3]};printf("*pa[0]=%d\n",*pa......
  • JavaScript 数字是什么?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬基于IEEE754标准的双精度64位二进制格式的值(-(253-1)到253-1)。——MDN......
  • 经济下行基建托底,偶数湖仓一体打造坚实新基建数字底座
    据人民网报道,今年五一全国国内旅游收入646.8亿元,同比减少42.9%,消费低迷、出口放缓。2022年国内生产总值(GDP)预期增长如何做到5.5%,政府给出了答案——新基建。基建托底让美国......
  • 偶数科技为辽宁农信数字化进程添加新动能
    斗转星移,数据急剧膨胀2016年辽宁农信上线了基于关系型数据库的数据仓库,实现了各源系统的数据汇集。与此同时上线了大数据平台,实现了审计系统对各源系统贴源层数据的存储、整......
  • 记录--数组去重的五种方法
    前言您或许会疑惑,网上那么多去重方法,这篇文章还有什么意义?别着急,这篇文章只节选了简单的,好玩的,古老的,有实际讲解意义的去重方法,除了去重的实现以外,我还将和您分享这其中......
  • php 常用数组方法
    array_shift() 函数用于删除数组中的第一个元素,并返回被删除的元素。array_pop()函数删除数组中的最后一个元素。array_unique()函数用于移除数组中重复的值。如果两......
  • 算法题——截断数组
    题目:截断数组要求将数组分成三个非空子数组,并且三个子数组内元素和相等,所以该数组最少要有3个元素,另外假设数组所有元素和为x,那三个子数组的元素和都为x/3,因此数组元素......
  • 【LeeCode】724. 寻找数组的中心索引
    【题目描述】给你一个整数数组 ​​nums​​ ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下......
  • 一维数组与二维数组———详细解读及一些注意事项
    一维数组一维数组的创建及初始化所谓数组,就是同一种元素的集合。一维数组的表达式为:数组元素类型+数组名+[常量表达式];#include<stdio.h>intmain(){//元素类型为int......