哈希表基础
了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。
什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 这句话很重要,大家在做哈希表题目都要思考这句话。
242.有效的字母异位词
本题要点
使用长度为26的数组进行统计
str.charCodeAt(index)
index 一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。
返回值 指定 index 处字符的 UTF-16 代码单元值的一个数字;如果 index 超出范围,charCodeAt() 返回 NaN。
every()方法
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。
代码实现
function isAnagram(s: string, t: string): boolean {
if(s.length !== t.length) return false;
let record = new Array(26).fill(0);
let base = 'a'.charCodeAt(0);
for(let i = 0; i < s.length; i++){
record[s.charCodeAt(i) - base]++;
record[t.charCodeAt(i) - base]--;
}
return record.every((item) => item === 0)
};
349. 两个数组的交集
本题要点
Set数据结构在JS中属于ES6新特性,可以拓展开讲讲。
求数组交集在JS中可以结合数组API来实现,详情见后。
代码实现
使用Set并迭代其中一个数组
function intersection(nums1: number[], nums2: number[]): number[] {
let retSet: Set<number> = new Set();
let tempSet: Set<number> = new Set(nums1);
for(let i of nums2){
if(tempSet.has(i)){
retSet.add(i);
}
}
return Array.from(retSet);
};
使用Set结合filter
function intersection(nums1: number[], nums2: number[]): number[] {
return Array.from(new Set(nums1.filter((item) => nums2.includes(item))));
};
//不难理解,filter求出公共元素,再用Set去重
202. 快乐数
本题要点
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
调用了JS数组API
代码实现
function isHappy(n: number): boolean {
// 计算数的各个位数的平方和
function calcSum(val: number): number{
return String(val).split('').reduce((pre, cur) => pre + Number(cur) * Number(cur), 0);
}
let sumSet:Set<number> = new Set();
// 不保留n的原始值,直接用n存sum的值 妙啊!
while(n !== 1 && !sumSet.has(n)){
sumSet.add(n);
n = calcSum(n);
}
return n === 1;
};
1. 两数之和
本题要点
哈哈哈,两数之和作为力扣第一题真的是梦开始的地方了。
代码实现
function twoSum(nums: number[], target: number): number[] {
let sumMap:Map<number, number> = new Map(),
index:undefined | number = undefined,
retArr:number[] = new Array();
for(let i = 0; i < nums.length; i++){
index = sumMap.get(target - nums[i]);
if(index !== undefined){
retArr = [i, index];
}
sumMap.set(nums[i], i);
}
return retArr;
};