一、哈希表-只出现一次的数字Ⅱ
1.js用map构建哈希表
由于本题中每个重复的数字有三个,所以需要用map构建键值对来判断只出现一次的数字。
2.代码编写
function singleNumberTwo(nums) { const freq = new Map() for (const num of nums) { freq.set(num,(freq.get(num) || 0) + 1);//map.get()返回一个 Map 对象中与指定键相关联的值,如果找不到这个键则返回 undefined } let ans = 0; for (const [num, occ] of freq.entries()) {//entries() 方法返回一个新的包含 [key, value] 对的 Iterator 对象,返回的迭代器的迭代顺序与 Map 对象的插入顺序相同。 if (occ == 1) { ans = num; break; } } return ans; }
二、位运算-只出现一次的数字Ⅱ
1.题目分析
由于每个重复的数字都会出现三次,而只有一个数字只出现一次。通过位运算转换为二进制后将每位的数字除以三的余数即为那个只出现一次的数字。
2.代码编写
function singleNumberTwo1(nums) { let ans = 0; for (let i = 0; i < 32; ++i) { let total = 0; for (const num of nums) { total += ((num >> i) & 1); } if (total % 3 != 0) { ans |= (1 << i); } } return ans; }