日拱算法:只出现一次的数字

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

image.png

xixixi,更文无力,转攻算法简单题。中难题畏畏缩缩,简单题我重拳出击~~

image.png


突一突 LeetBook 列表/算法面试题汇总

冲冲冲~~


题目:### 只出现一次的数字

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


说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?


示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4


解:

第一个反应用 map 来解,时间复杂度 O(n),是线性的,满足题意,只不过空间复杂度消耗是 O(n),怎样降低空间复杂度,在方法二中讲;


解法一:用 map 来解:

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
   let map = new Map();
    for(let i = 0; i<nums.length;i++){
        if(map.has(nums[i])){
            map.set(nums[i],map.get(nums[i])+1);
        }else{
            map.set(nums[i],1)
        }
    }
    for(let [key,value] of map.entries()){
        if(value===1){
            return key
        }
    }
};

image.png


解法二:用 异或 解


重点当然就是在怎么理解:不使用额外空间来实现

其实就是就要在数组本身上进行操作,异或操作可以帮助我们实现这一点;

异或(eor)是一个数学运算符。它应用于逻辑运算。两个相等的数异或为0;两个值不相同,则异或结果为1;一个不为0的数与0异或为这个数本身;


/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
  for (var i = 1; i < nums.length; i++) {
    nums[0] = nums[0] ^ nums[i];    // 把所有的元素都异或到nums[0]上。
  }
  return nums[0];
};

image.png


相关文章
|
7月前
|
人工智能 自然语言处理 算法
全模态模型Qwen2.5-Omni开源,7B尺寸实现全球最强性能
通义千问Qwen2.5-Omni-7B正式开源,作为首个端到端全模态大模型,支持文本、图像、音频和视频等多种输入形式,实时生成文本与自然语音合成输出。它在多模态融合任务测评中刷新纪录,性能远超同类模型。Qwen2.5-Omni采用Thinker-Talker双核架构,实现语义理解与语音生成高效协同,以小尺寸7B参数让全模态大模型广泛应用成为可能,现已在魔搭社区和Hugging Face同步开源。
全模态模型Qwen2.5-Omni开源,7B尺寸实现全球最强性能
|
8月前
|
SQL
【YashanDB知识库】YAS-04379 invalid alteration of datatype
【YashanDB知识库】YAS-04379 invalid alteration of datatype
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文重点介绍迭代器模式,通过具体示例展示了如何在Kotlin中实现迭代器模式,包括使用Iterator、Iterable接口及重载iterator运算符的方法。
110 4
|
移动开发 前端开发 JavaScript
web前端移动端课程之canvas教程系列
web前端移动端课程之canvas教程系列
192 0
|
前端开发
前端学习案例1-数组反序&排序&乱序的方法
前端学习案例1-数组反序&排序&乱序的方法
168 0
前端学习案例1-数组反序&排序&乱序的方法
|
缓存 搜索推荐 前端开发
小麦带你学服务治理六
跟着麦弟,吃香喝辣
|
运维 供应链 Cloud Native
前沿分享|数澜科技联合创始人&副总裁 江敏:基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践
本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,数澜科技联合创始人&副总裁江敏关于“基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践”的分享。
841 0
前沿分享|数澜科技联合创始人&副总裁 江敏:基于云原生数据仓库AnalyticDB PostgreSQL的最佳实践
|
前端开发
EasyUI+JavaWeb奖助学金管理系统[14]-机构新增、编辑、删除的实现
本文目录 1. 本章任务 2. 新增功能的实现 2.1 添加新增弹窗 2.2 页面初始化时加载上级机构列表 2.3 后端提供获取机构列表方法 2.4 点击保存后将内容提交 2.5 后端处理新增保存请求 2.6 测试 3. 编辑功能的实现 4. 删除功能的实现 5. 总结
217 0
EasyUI+JavaWeb奖助学金管理系统[14]-机构新增、编辑、删除的实现
|
前端开发 容器 Web App开发
如何用纯 CSS 创作一个“女神来了,快让路”的动画
效果预览 在线演示 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/RYZbmE 可交互视频 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
953 0