ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

260. 只出现一次的数字 III --LeetCode每日一题打卡

2021-10-30 09:07:51  阅读:149  来源: 互联网

标签:cur item -- nums 示例 int 260 cur1 打卡


题目链接

 260. 只出现一次的数字 III - 力扣(LeetCode)  

题目描述

给定一个整数数组 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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number-iii

提示 

2     <=     nums.length        <=  3 * 104
- 2 ^ 31     <=        nums[i]           <=  2 ^ 31 - 1
除两个只出现一次的整数外,nums 中的其他数字都出现两次。

思路 

我们知道两个不同的数,它们的二进制表示至少有一位不同。

此时我们可以通过异或操作来知道两个数中不同的数位,再通过lowbit(n)取出最右侧的 1,此处记作第k位。

   然后我们可以把数组中的数划分为两部分:

  • 第k位为1
  • 第k位不为1

而分别出现一次的数,一定在这两部分各占一个。

我们可以通过与运算 & 来判断第k位是否为1,然后把第k位为1的全部异或一遍,最后的得到的数一定是其中一个。 

代码 

class Solution {
    public int[] singleNumber(int[] nums) {
        int cur1 = 0, cur2 = 0, cur = 0;
        for(int item : nums){
            cur1 ^= item;
        }
        cur = cur1 & ( - cur1);
        for(int item : nums){
            if((cur & item) == cur){
                cur2 ^= item;
            }
        }
        return new int[]{cur1 ^ cur2, cur2};
    }
}

补充 

朝着一个既定的方向去努力,就算再没有天赋,在时间的积累下也能稍稍有点成就吧。 

加油呀,快起床去刷题吧。          ————虽菜但在努力的小鲨鱼

标签:cur,item,--,nums,示例,int,260,cur1,打卡
来源: https://blog.csdn.net/m0_51809739/article/details/121046146

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有