最近面试了一些公司,拿了一些offer,不记录概念题目,仅记录coding类题目。小伙伴们空闲时间可以做这些题目练练手。
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:
输入: [2,2,1]输出: 1示例 2:
输入: [4,1,2,1,2]输出: 4这是一道leetcode 简单难度的题。题目:leetcode 136 只出现一次的数字题解:136 只出现一次的数字
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function (nums) {
/** 解法1:暴力遍历
* 性能:704ms 40.5MB
*/
let numsSet = Array.from(new Set(nums));
let numsMap = numsSet.map((num) => ({
num,
count: 0,
}));
nums.forEach((num, i) => {
numsMap.forEach((numM, j) => {
if (numM.num === num) {
numM.count++;
}
});
});
let filterArr = numsMap.filter((num) => num.count === 1);
return filterArr[0].num;
/** 解法2:Set 首次出现add 二次出现delete
* 性能: 72 ms 38MB
*/
let numsSet = new Set();
for (let i = 0; i < nums.length; i++) {
if (!numsSet.has(nums[i])) {
numsSet.add(nums[i]);
} else {
numsSet.delete(nums[i]);
}
}
return [...numsSet][0];
};
<< · Back Index ·>>