JS算法-只出现一次的数字

简介: JS算法-只出现一次的数字

题目


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

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


题目解析


第一种


定义函数 singleNumber,并接收一个参数 nums,代表一个整数类型的数组。创建一个空的Map数据结构 map。使用for循环遍历数组 nums 中的每一个元素。对于每个数组元素,做以下判断:如果 map 中已经存在当前元素,则将该元素对应的value加1。如果 map 中不存在当前元素,则将该元素添加到 map 中,并将它的value设置为1。使用for..of循环遍历 map 中的所有条目。对于每个条目,判断它的value是否等于1。如果条目的value等于1,则返回该条目的key作为结果,即找到了只出现一次的数字

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 item of map.entires()) {
        if (item[1] == 1) {
          return item[0]   
         }
    }
};


第二种


首先需要对数组进行排序,这样相同的元素就都在一起了。定义三个变量:cur表示当前遍历到的数,index表示当前遍历到的元素的下标,cnt表示当前遍历到的数出现的次数。使用循环遍历整个排序后的数组。循环的条件是index小于数组的长度。判断cur和nums[index]是否相等。如果相等,说明当前遍历到的数已经出现过了,所以计数器cnt加1,同时将index指向下一个元素。如果cur和nums[index]不相等,说明当前遍历到了一个新数。那么就需要判断之前遍历到的数cur的出现次数是否是1。如果是1,说明cur就是只出现1次的数,直接返回即可。如果cur的出现次数不是1,说明需要继续找,要重新设定cur的值、cnt的值,继续循环。最后,如果遍历完整个数组,最后一个数仍然出现次数大于1,那么这个数就是要找的只出现1次的数,返回cur即可

var singleNumber = function(nums) {
    nums.sort((a,b)=>a-b)
    let cur = nums[0],index = 1,cnt = 1
    while(index < nums.length){
        if(cur == nums[index]){
            cnt++
            index++
        }else{
            if(cnt <= 1){
                return cur
            }else{
                cur = nums[index]
                cnt = 1
                index++
            }
        }
    }
    return cur
};
相关文章
|
3月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
4月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
308 1
|
4月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
76 1
|
4月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
189 1
|
4月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
578 1
|
5月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
70 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
|
7天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
13天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。