当前位置: 首页 > news >正文

算法18(力扣136)只出现一次的数字

1、问题

         给你一个 非空 整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。  你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

2、示例

(1)

            示例 1 :

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

            输出:1

(2)

             示例 2 :

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

            输出:4

3、解决思路

方法1

        统计数组频次,然后将map转化为数组,通过filter返回其中频次为1的数

方法2

        利用异或,因为除了某个元素只出现一次以外,其余每个元素均出现两次,相同的会抵消,不同的那个,如果初始值为0的话,0和不同的那个的结果是不同的那个

        (同0,异1,二进制)

4、具体步骤

方法1

(1)统计数组频次

      

(2)将map转化为数组,通过filter返回其中频次为1的数

方法2

        (1)设置结果res的初始值为0,遍历数组

        (2)在数组中进行异或,然后将异或结果,赋给res

        

        

5、完整代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>只出现一次的数字</title>
  </head>
  <body>
    <p>
      给你一个 非空 整数数组 nums
      ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。<br />

      你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
    </p>
    <p>
        <p>
            示例 1 :
            输入:nums = [2,2,1]
            输出:1
        </p>
        <p>           
            示例 2 :
            输入:nums = [4,1,2,1,2]
            输出:4
        </p>
        <p>
            示例 3 :
            输入:nums = [1]
            输出:1
        </p>
    </p>
    <p>
        线性时间复杂度(Linear Time Complexity)的算法在时间上的开销与其处理的输入数据规模成线性关系,即时间复杂度为 O(n),其中 n 是输入数据的大小。以下是几种常见的线性时间复杂度的算法:
    </p>
    <script>
        let nums = [4,1,2,1,2]
        singleNumber(nums)
        function singleNumber(nums) {
            const newMap = new Map()
            nums.forEach(item => {
                if (newMap.has(item)) {
                    newMap.set(item,newMap.get(item)+1)
                }else{
                    newMap.set(item,1)
                }
            });
            // console.log(newMap);
            const arr = Array.from(newMap.entries())
        //    console.log(arr);
            const res = arr.filter(item => item[1]===1)[0][0]
        //    console.log(res);
           return res
            
        };
    </script>
  </body>
</html>

6、力扣通过代码

方法1

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
            const newMap = new Map()
            nums.forEach(item => {
                if (newMap.has(item)) {
                    newMap.set(item,newMap.get(item)+1)
                }else{
                    newMap.set(item,1)
                }
            });
            // console.log(newMap);
            const arr = Array.from(newMap.entries())
        //    console.log(arr);
            const res = arr.filter(item => item[1]===1)[0][0]
        //    console.log(res);
           return res
};

方法2

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
            // ans被初始化为0。由于异或操作的自反性,任何元素与0异或都等于它本身
            let res = 0;
            for(const num of nums) {
                // console.log(res,num,res^num);
                res ^= num;
                // console.log(res);
                
            }
            return res;
};

相关文章:

  • Huggingface加载阅读理解任务数据集至本地
  • 深度学习项目--基于RNN的阿尔茨海默病诊断研究(pytorch实现)
  • Node.js技术原理分析系列——Node.js调试能力分析
  • pycharm ai插件
  • 【人工智能】如何选择合适的大语言模型,是能否提高工作效率的关键!!!
  • 【学术投稿-第四届智能电网和绿色能源国际学术会议(ICSGGE 2025)】CSS基本选择器详解:掌握基础,轻松布局网页
  • ML.NET库学习006:成人人口普查数据分析与分类预测
  • AI 编程私有化部署,在使用 cline 时,可能无法避免私隐的泄漏问题
  • Kotlin 优雅的接口实现
  • 如何通过MDM高效管理企业的Android平板?
  • [每日动态]科技新闻每日信息差2025年2月14日
  • 景联文科技:以精准标注赋能AI未来,打造高质量数据基石
  • 数据结构--八大排序算法
  • 2025年单片机毕业设计选题物联网计算机电气电子通信类
  • 开发美颜相机录制视频时,对于音频数据的处理
  • ECharts鼠标悬浮提示框数字设置鼠标在左侧时 tooltip 显示到右侧,鼠标在右侧时 tooltip 显示到左侧。
  • OpenCV机器学习(3)期望最大化(Expectation-Maximization, EM)算法cv::ml::EM
  • 深入解析 vLLM:高性能 LLM 服务框架的架构之美(上)
  • 深入探讨复变函数:核心概念与关键应用
  • Day1 25/2/14 FRI
  • 做传奇网站/各大网站排名
  • 网站多久才能做起来/让手机变流畅的软件下载
  • 做网站的注意点/seo排名优化教程
  • dnf怎么做提卡网站/持啊传媒企业推广
  • 网站 内容建设存在的问题/东营seo
  • wordpress 风格/乐云seo