leetcode-260:只出现一次的数字 III

简介: leetcode-260:只出现一次的数字 III

题目

题目连接

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

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

示例 1:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例 2:

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

示例 3:

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

解题

方法一:

1.所有数异或完后,结果必定不是0

2.最后一个二进制位1,作为mask

3.根据mask将nums分为两部分,两部分分别异或,求得两个数

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        long m;
        for(int num:nums){
            m^=num;
        }
        int mask=m&(-m);
        vector<int> res(2);
        for(int num:nums){
            if(mask&num){
                res[0]^=num;
            }else{
                res[1]^=num;
            }
        }
        return res;
    }
};
相关文章
|
5月前
|
算法
leetcode-136:只出现一次的数字
leetcode-136:只出现一次的数字
30 0
【力扣每日一题】1365. 有多少小于当前数字的数字
【力扣每日一题】1365. 有多少小于当前数字的数字
|
5月前
|
算法
【力扣】136. 只出现一次的数字
【力扣】136. 只出现一次的数字
|
5月前
leetcode:476. 数字的补数
leetcode:476. 数字的补数
106 0
|
12月前
|
算法
【LeetCode】136. 只出现一次的数字、118. 杨辉三角
目录 136. 只出现一次的数字 118. 杨辉三角
45 0
|
算法 Java C语言
leetcode之只出现一次的数字
今天为大家分享的是关于在数组中找到只出现一次数字的系列题目,我将使用c跟Java来实现,希望我的分享能够帮助到大家。
|
机器学习/深度学习 存储 算法
算法打卡Day23_leetcode _136. 只出现一次的数字
算法打卡Day23_leetcode _136. 只出现一次的数字
算法打卡Day23_leetcode _136. 只出现一次的数字
|
机器学习/深度学习 算法
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
|
Python
LeetCode 1323. 6 和 9 组成的最大数字
给你一个仅由数字 6 和 9 组成的正整数 num。
97 0
|
Python
LeetCode 260. 只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
99 0