LeetCode136——只出现一次的数字

news2025/7/23 22:04:20

LeetCode136——只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

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

Result01

位运算知识点:

<1> 异或相同为0,不同为1.
<2>0 ^ x = x ; x ^ x = 0
<3>位运算满足结合律和交换律,即与运算顺序无关

位运算讲解
在这里插入图片描述
这段代码的时间复杂度为O(n),其中n为数组长度。

    public static int singleNumber(int[] nums){
        int result = 0;
        for (int i = 1; i < nums.length; i++) {
            result= result^nums[i];
        }
        return result;
    }

如果不考虑此题的时间空间复杂度限制,下面几种方法也值得学习。

Result02

使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。
在这里插入图片描述
这段代码的时间复杂度为O(n),其中n为数组长度。首先遍历一次数组统计每个数字的出现次数,然后再遍历一次哈希表找到只出现一次的数字。

 public static int findSingleNumber(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        
        // 遍历数组,统计每个数字出现的次数
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        
        // 遍历哈希表,找到只出现一次的数字
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                return entry.getKey();
            }
        }
         if (hashSet.isEmpty()){
            return -1;
        }
      
        return -1; // 如果没有只出现一次的数字,则返回一个默认值
    }

Result03

使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。
在这里插入图片描述
这段代码的时间复杂度为O(n),其中n为数组长度。首先遍历一次数组统计每个数字的出现次数,然后再遍历一次哈希表找到只出现一次的数字。

Result04

使用集合(不会存在重复元素)存储数组中出现的所有数字,并计算数组中的元素之和。然后通过计算集合中的元素之和的两倍减去数组中的元素之和,得到只出现一次的数字。
在这里插入图片描述
这段代码的时间复杂度为O(n),其中n为数组长度。首先遍历一次数组将数字添加到集合中,并计算数组元素之和。然后遍历集合计算集合元素之和。最后通过计算集合元素之和的两倍减去数组元素之和,得到只出现一次的数字。

  public static int singleNumber(int[] arr) {
        HashSet<Integer> set = new HashSet<>();
        int arraySum = 0;
        int setSum = 0;

        // 遍历数组,将数字添加到集合中,并计算数组元素之和
        for (int num : arr) {
            set.add(num);
            arraySum += num;
        }

        // 遍历集合,计算集合元素之和
        for (int num : set) {
            setSum += num;
        }

        // 通过计算集合元素之和的两倍减去数组元素之和,得到只出现一次的数字
        return 2 * setSum - arraySum;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1156951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:Nacos有几种负载均衡策略?

作者 | 磊哥 来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09; 转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09; Nacos 作为目前主流的微服务中间件&#xff0c;包含了两个顶级的微服务功能&#xff1a;配置中心和注册中心。 1.配置中心…

10月第4周榜单丨飞瓜数据B站UP主排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年10月23日-10月29日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…

【数智化案例展】某国有电力企业——看电力公司如何做好数据资产高效管理,赋能业务决策...

‍ 逸迅科技案例 本项目案例由逸迅科技投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2020年8月25日&#xff0c;国资委办公厅颁布《关于加快推进国有企业数字化转型…

SpringBoot概要简介SpringBoot入门,pom文件剖析,打jar包以及banner的修改(附banner生成网址)

SpringBoot概要 SpringBoot介绍 随着动态语言的流行&#xff08;Ruby、Scala、Node.js&#xff09;, Java的开发显得格外的笨重&#xff1b;繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下&#xff0c;Spring Boot由此诞生&#xff0c…

C++前缀和算法的应用:统计上升四元组

C前缀和算法的应用&#xff1a;统计上升四元组 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 给你一个长度为 n 下标从 0 开始的整数数组 nums &#xff0c;它包含 1 到 n 的所有数字&#xff0c;请你返回上…

基于松鼠算法的无人机航迹规划-附代码

基于松鼠算法的无人机航迹规划 文章目录 基于松鼠算法的无人机航迹规划1.松鼠搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用松鼠算法来优化无人机航迹规划。 1.松鼠搜索算法 …

EasyRecovery16优秀的电脑数据恢复软件

你是不是也有过这样的经历&#xff0c;当需要一个文件的时候&#xff0c;却发现不小心被删除了&#xff1b;或者在某个瞬间身体像不受大脑控制般&#xff0c;按下删除或格式化键。气的半夜都能从床上爬起来抽自己一巴掌&#xff0c;反正我是这样的。 我从小到大不小心删除和格…

PowerToys使用:Windows自定义键盘(非编程)

使用紧凑型键盘或者苹果键盘有时候觉得挺麻烦&#xff0c;常用的键偏偏没有&#xff0c;特别是苹果键盘&#xff0c;没有【del】键&#xff0c;非常非常不爽。 笔记本电脑用久了&#xff0c;难免弄坏一两个键&#xff0c;比如【s】键&#xff0c;维修挺麻烦的&#xff0c;换新太…

第五章 子图的绘制及坐标轴共享

第五章 子图的绘制及坐标轴共享 1.绘制固定区域的子图 ​ matplotlib可以将整个画布规划成等分布局的mn&#xff08;行列&#xff09;的矩阵区域&#xff0c;并按照先行后列的方式对每个区域进行编号&#xff08;编号从1开始&#xff09;&#xff0c;之后在选中的某个或某些区…

在图表中添加图例plt.legend()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 在图表中添加图例 plt.legend() plt.legend的作用是? import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y1 [1, 2, 4, 8, 16] y2 [1, 3, 9, 27, 81] fig, (ax1, ax2) plt.sub…

Mysql系列-索引类型

一 、索引类型别 根据叶子节点的内容分类的索引类型 InnoDB 使用B tree 索引模型&#xff0c;根据叶子节点是否存储数&#xff08;根据叶子节点的内容&#xff09;分为主键索引和非主键索引&#xff1b;非主键索引包括&#xff1a;普通索引、唯一索引、组合索引主键索引的叶子…

sql-50练习题16-20

sql-50练习题16-20 前言数据库表结构介绍学生表课程表成绩表教师表 1-6 检索"01"课程分数小于60&#xff0c;按分数降序排列的学生信息1-7 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩1-8 查询各科成绩最高分、最低分和平均分&#xff1a;以如下形式…

上海亚商投顾:三大指数小幅调整,医药股继续活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指昨日弱势震荡&#xff0c;尾盘探底回升一度翻红&#xff0c;深成指盘中跌超1%&#xff0c;午后跌幅有所收窄。…

最优值函数二

一、扫地机器人的示例 我们可以明确给出扫地机器人的Bellman最优方程。为了使问题更简洁&#xff0c;我们将状态高和低以及动作搜索、等待和充电分别缩写为h、l、s、w和re。由于只有两个状态&#xff0c;Bellman最优方程由两个方程组成。v∗(h)的方程可以写成&#xff1a; 按照…

飞鼠异地组网工具全网互通实战指南

飞鼠异地组网工具全网互通实战指南 一、飞鼠异地组网工具介绍1.1 飞鼠工具简介1.2 飞鼠工具官网 二、本次实践介绍2.1 本次实践前提2.2 本次实践简介2.3 本次实践环境规划 三、异地组网配置3.1 进入中心控制器节点管理后台3.2 网卡设置3.3 进入子网节点管理后台3.4 网卡设置 四…

EasyExcel动态复杂表头导出设置方法

目录 需求分析解决方案数据问题 需求分析 公司数据比较特殊有一部分数据需要动态修改导致信息导入时表头是不确定的&#xff0c;但其中又有一部分表头是固定的&#xff0c;如下图所示&#xff0c;如果表头全部是固定的话可以通过EasyExcel实体类的注解很轻松的解决&#xff0c…

解决CSS中height:100%失效的问题

出现BUG的场景&#xff0c;点击退出到登录页面&#xff0c;发现高度不对 上面出现了一种只是占了内容的高度&#xff0c;没有占满100%&#xff0c;为什么会出现这种情况呐&#xff1f; 让div的height"100%"&#xff0c;执行网页时&#xff0c;css先执行到&#xff0…

力扣刷题 day61:10-31

1.单词规律 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 方法一&#xff1a;双哈希表 #方法一&…

“碳”索未来,“汇”聚双碳

10月28日在广东省惠州市由汇林盛源低碳科技&#xff08;广东&#xff09;有限公司开办的2023汇林绿碳经济发展专题交流会取得圆满成功。 本次交流会基于我国在2030年达到碳达峰&#xff0c;2060年达到碳中和的目标&#xff0c;提出了汇林盛源公司在绿碳经济领域特有的优势与思考…

jeecg-uniapp 杂七杂八数据

uniapp 点击事件 tap: 单击事件 confirm: 回车事件 blur:失去焦点事件 touchstart: 触摸开始事件 touchmove: 触摸移动事件。 touchend: 触摸结束事件。 longpress: 长按事件。 input: 输入框内容变化事件。 change: 表单元素值变化事件。 submit: 表单提交事件。 scroll: 滚动…