首页 > 其他分享 >剑指 Offer 56 - I. 数组中数字出现的次数 - 力扣(LeetCode)

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

时间:2022-10-24 01:44:05浏览次数:99  
标签:数字 nums int Offer 56 力扣 异或 vector

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

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

思路:分组异或

看到数出现偶数次和奇数次,应该想到用异或做。因为对一个数异或偶数次,等于异或0。

考虑只有一个数出现奇数次的情况:这种情况下,只需将所有数进行异或,得到的就是出现奇数次的数。

现在考虑两个数出现奇数次的情况,设这两个数分别为a和b

  1. 对所有数进行异或得到的结果时a^b ,设x= a^b
  2. 考察x中为1的某一位,该位为1,说明a和b的这一位不相同,而两个相同的数每一位都相同。因此我们可以以这一位是否为1,将所有数分为两组,分别进行异或,得到的答案就是a和b
class Solution {
public:
    vector<int> singleNumbers(vector<int>& nums) {
        int x=nums[0];
        for (int i=1;i<nums.size();i++)
        {
            x^=nums[i];
        }
        int x1=0;
        int x2=0;
        int k=0;
        while (!(x&1))
        {
            k++;
            x>>=1;
        }
        for (int i=0;i<nums.size();i++)
        {
            if (1&(nums[i]>>k))
                x1^=nums[i];
            else
                x2^=nums[i];
        }
        vector<int> v={x1,x2};
        return v;
    }
};

标签:数字,nums,int,Offer,56,力扣,异或,vector
From: https://www.cnblogs.com/sjw-blogs/p/16820226.html

相关文章

  • 剑指 Offer 48. 最长不含重复字符的子字符串 - 力扣(LeetCode)
    剑指Offer48.最长不含重复字符的子字符串-力扣(LeetCode)思路:最长子串要么包括最后一个字符,要么不包括最后一个字符。我们可以设长度为i的包含最右侧字符的最长的串......
  • 2022年10月23日22:34:56
    最近事情很多社团招新制作一本书新成员培训兼职不定时的兼职工作勤工俭学有时间就要去总结大一已经浪费了很多时间了,没想到现在还有那么多无关紧要的事情要做,很......
  • 字节实习6个月后,我劝你至今0offer赶紧去实习
    首先摆出来实习证明镇楼,我可不是标题党,我是真的实习了六个月。适用人群假如你是一个已经有了多段实习经历,只是因为运气不好,那么大可不必把时间花在实习上,继续海投海面才......
  • 力扣1768(java&python)-交替合并字符串(简单)
    题目:给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返......
  • P5683 [CSP-J2019 江西] 道路拆除
    简要题意给你一个\(m\)条边\(n\)个点的无向图。你需要去掉一些边,使得\(1\tos_1,1\tos_2\)连通,且\(1\tos_1\)的最短路径长度小于\(t_1\),\(1\tos_2\)的最......
  • 力扣 (LeetCode)算法入门——Day1
    704.二分查找题目:给定一个n个元素有序的(升序)整型数组nums和一个目标值target ,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。classSolut......
  • 云安全攻防体系实践-CVE-2018-15664分析
    CVE-2018-15664符号链接替换漏洞如果在docker守护进程检查复制路径时,攻击者可以利用中间的间隙,先在这里放置一个非符号链接的常规文件或目录,检查结束后,攻击者赶在Docker守护......
  • 《剑指offer》day17
    最小的k个数题目描述思路快速排序注意本题对返回结果的顺序性没有要求,可以根据基准点来提高效率当基准点==k,直接返回当基准点>k,往左递归否则往右递归代码实现c......
  • P4568 [JLOI2011]飞行路线
    分层图最短路P4568[JLOI2011]飞行路线一、分层图概念分层图最短路:在可以进行分层图的图上解决最短路问题分层图:理解为有多个平行的图模型:在一个正常的图上可以进......
  • 力扣1235(java)-规划兼职工作(困难)
    题目:你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作......