一、基本概念
HashMap 数据结构为数组+链表。整体是一个数组;数组每个位置是一个链表;链表每个节点中的Value即我们存储的Object。
二、哈希表-只出现一次的数字
1.js用set构建哈希表
因为136题中重复的数字只会出现两次,所以在此我们可以用set集合构建hashmap。遍历数组,当set中没出现数组中的数字时添加进去,当set中有这个数字时便删去这个数字,最后返回set中仅有的元素。
2.代码编写
function singleNumber(nums) { let set = new Set(); for (let num of nums) { if (set.has(nums)) { set.delete(num); } else { set.add(num) } } return num = Array.from(set)[0];//从类数组对象或者可迭代对象中创建一个新的数组实例 }
一、基本概念
&,
按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。用于消去x的最后一位的1(x=1100,x-1=1011,x&(x-1)=1000);判断奇偶数(n为数的最后一位二进制位,n&1 ==1 => n是个奇数)
|,按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。
^,按位异或,若参加运算的两位二进制位值相同则为0,否则为1。a^a = 0, a^0 = a, a^b^a = a^a^b = 0^b = b
~,取反,是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0。
<<,左移,用来将一个数的各二进制位全部左移N位,右补0。
>>,右移,将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。
二、异或运算-只出现一次的数字
1.解题思路
利用异或运算中的a ^ a ^ b = 0 ^ b = b非常方便。
2.代码编写
function singleNumber(nums) { let ans = 0; for (const num of nums) { ans ^= num; } return ans; }