• 【LeetCode: 260. 只出现一次的数字 III | 位运算 | 哈希表】


    在这里插入图片描述

    🚀 算法题 🚀

    🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
    🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
    🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
    🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
    🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

    🚀 算法题 🚀

    在这里插入图片描述

    在这里插入图片描述

    🚩 题目链接

    ⛲ 题目描述

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

    提示:

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

    🌟 求解思路&实现代码&运行结果


    ⚡ 哈希表

    🥦 求解思路1
    1. 我们可以直接统计集合中元素的个数,找到只出现一次的俩个元素。
    2. 实现也比较简单,大家可以自行实现,此处不做过多的讲解。

    ⚡ 位运算

    🥦 求解思路2
    1. 这道题目让我们求解的是,找到数组中只出现一次的俩个元素分别是什么。
    2. 第一次做还真的不容易想到,好在评论区有很多优秀的题解可以供我们参考。
    3. 具体求解思路如下:首先,我们还是通过异或运算,先把所有出现过俩次的元素都消除掉,遍历结束,最后的结果就是数组中只出现一次的俩个元素异或的值。
    4. 接下来重点来了,继续分组异或,怎么分组异或呢?什么意思呀?因为数组中的俩个元素只是出现了一次,那么,这俩个数字肯定是不相等的,并且,异或后,二进制中,一定有一个位置为1,也就是说这是区分俩个数字的标识。我们直接求得异或结果后最低 1及其后面的0,也叫 lowbit,可以用 s & -s 算出。
    5. 接下来再次遍历,并且进行判断,如果当前数num & lowbit == 0 ,此时在下标为0的数组中异或它的结果,反之,在下标为1的数组中异或它的结果。
    6. 具体求解的过程步骤请看下面代码。
    🥦 实现代码
    class Solution {
        public int[] singleNumber(int[] nums) {
            int res=0;
            for(int n:nums) res^=n;
            int[] ans=new int[2];
            int lowbit1=res&-res;
            for(int n:nums){
                if((lowbit1&n)==0){
                    ans[0]^=n;
                }else{
                    ans[1]^=n;
                }
            }
            return ans;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    🥦 运行结果

    在这里插入图片描述


    💬 共勉

    最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    vue3事件处理
    Kafka为什么这么快?它的高性能是如何实现的?
    网络安全大厂面试真题库(求职必备!)
    内存空间的分配与回收之连续分配管理方式
    JavaWeb-02:XML的学习
    一文教你如何快速备考云计算HCIE 3.0 !
    变分推断(Variational Inference)解析
    策略模式
    linux高级作业
    ApplicationContext版本的快速入门
  • 原文地址:https://blog.csdn.net/Coder_ljw/article/details/133852332