提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
1512. 好数对的数目
题目链接
思路
- 用哈希表记录每次迭代的数出现的次数,若已出现进行累加
- 计数器累加当前数出现的次数
题解
- ts
function numIdenticalPairs(nums: number[]): number {
// let sum = 0;
// for (let i = 0; i < nums.length; ++i) {
// for (let j = i + 1; j < nums.length; ++j) {
// if (nums[i] == nums[j]) {
// sum++;
// }
// }
// }
// return sum;
let map: Map<number, number> = new Map()
let sum = 0;
for (let item of nums) {
sum += map.get(item) || 0
if (map.has(item)) {
let num = map.get(item)
map.set(item, ++num)
} else {
map.set(item, 1)
}
}
return sum;
};
2006. 差的绝对值为 K 的数对数目
题目链接
思路
- 定义一个哈希表,枚举 j,分别查找 nums[j] + k 和 nums[j] - k 是否在哈希表中,并且累加计数;
- 将 nums[j] 插入哈希表;
题解
- ts
function countKDifference(nums: number[], k: number): number {
let hash = {};
let ans = 0;
for (let j = 0; j < nums.length; ++j) {
let x = nums[j] + k;
if (x >= 1 && x <= 100) {
ans += hash[x] || 0;
}
x = nums[j] - k;
if (x >= 1 && x <= 100) {
ans += hash[x] || 0;
}
let num = hash[nums[j]] || 0
hash[nums[j]] = ++num;
}
return ans;
};
1347. 制造字母异位词的最小步骤数
题目链接
思路
- 使用两个哈希表分别映射来年两个字符串
- 计算两个哈希表每个字母对应的差值当差值为负数累加
题解
- ts
function minSteps(s: string, t: string): number {
let ans = 0, i
let hash1 = {}, hash2 = {}
for (i = 0; s[i]; ++i) {
if (hash1[s[i]]) {
++hash1[s[i]]
} else {
hash1[s[i]] = 1
}
if (hash2[t[i]]) {
++hash2[t[i]]
} else {
hash2[t[i]] = 1
}
}
for (i = 97; i <= 122; ++i) {
let x = (hash1[String.fromCharCode(i)] || 0) - (hash2[String.fromCharCode(i)] || 0);
if (x > 0) {
ans += x;
}
}
return ans
};
面试题 10.02. 变位词组
题目链接
思路
- 定义一个哈希表,先将每个字符串按照字典排序,然后插入哈希表
- 遍历哈希表,展成二维数组
题解
- ts
function groupAnagrams(strs: string[]): string[][] {
let map = {}
let ret = []
for (let i = 0; i < strs.length; ++i) {
let s: any = strs[i].split('')
s.sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0))
s = s.join('')
if (map[s]) {
map[s].push(strs[i])
} else {
map[s] = [strs[i]]
}
}
for(let key in map){
ret.push(map[key])
}
return ret
};