[路飞]_leetcode-剑指 Offer II 004-只出现一次的数字

简介: leetcode-剑指 Offer II 004-只出现一次的数字

网络异常,图片无法展示
|


「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战


[题目地址][B站地址]


给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。 请你找出并返回那个只出现了一次的元素。 示例 1:


输入: nums = [2,2,3,2]
输出: 3
复制代码


示例 2:


输入: nums = [0,1,0,1,0,1,100]
输出: 100
复制代码


提示:


  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次


本题解题思路如下:


  1. 由题意可知给定数组中的元素都是整数,且除了某个元素出现一次外,其他元素都出现三次,那么我们可以用一个数据结构来记录每个元素的值以及出现的次数
  2. 当出现某个元素出现三次的时候,我们将该元素删除,最后我们该数据结构中剩下的就是唯一一个只出现一次的元素的值以及对应的次数 1


那接下来我们要考虑就是采用哪种数据结构来存储元素值以及对应的次数


我们可以使用 object 来做,但是这里我们会涉及频繁的增删键值,使用 object 的话,效率不是很高


JavaScript 中有一种数据结构 Map ,它是 Object 的实例,但是相对 ObjectMap占用的内存空间更小一些,在增删操作的时候,性能会更好一点。


代码如下:


var singleNumber = function(nums) {
    const map = new Map();
    for(let i = 0;i<nums.length;i++){
        if(map.has(nums[i])){
            if(map.get(nums[i])===2) map.delete(nums[i])
            else map.set(nums[i],2)
        }
        else map.set(nums[i],1)
    }
    let ret;
    map.forEach((val,key) => {
        ret = key;
    })
    return ret;
};
复制代码


至此我们就完成了 leetcode-剑指 Offer II 004-只出现一次的数字


如有任何问题或建议,欢迎留言讨论!

相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
51 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
23 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
39 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4
|
3月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
42 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
34 2