网络异常,图片无法展示
|
「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
给你一个整数数组 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
那接下来我们要考虑就是采用哪种数据结构来存储元素值以及对应的次数
我们可以使用 object
来做,但是这里我们会涉及频繁的增删键值,使用 object
的话,效率不是很高
在 JavaScript
中有一种数据结构 Map
,它是 Object
的实例,但是相对 Object
,Map
占用的内存空间更小一些,在增删操作的时候,性能会更好一点。
代码如下:
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-只出现一次的数字
如有任何问题或建议,欢迎留言讨论!