- 1.两数之和
- 219.存在重复元素 2
- 242.有效的字母异位词
- 349.两个数组的交集
- 49.字母异位词分组
1.两数之和
var twoSum = function (nums, target) {
const map = {};
let ans = [];
for (let i = 0; i < nums.length; i++) {
let key = target - nums[i];
if (map[key] !== undefined) {
ans[0] = map[key];
ans[1] = i;
break;
} else {
map[nums[i]] = i;
}
}
return ans;
};
twoSum([2, 7, 11, 15], 9);
219.存在重复元素2
var containsNearbyDuplicate = function (nums, k) {
const sets = new Set();
for (let i = 0; i < nums.length; i++) {
if (sets.has[nums[i]]) return true;
sets.add(nums[i]);
if (sets.size > k) {
sets.delete(nums[i - k]);
}
}
return false;
};
console.log(containsNearbyDuplicate([1, 2, 3, 1], 3));
console.log(containsNearbyDuplicate([1, 2, 3, 1, 2, 3], 2));
242.有效的字母异位词
var isAnagram = function (s, t) {
if (s.length != t.length) return false;
const map = {};
for (let ch of s) {
map[ch] = (map[ch] ?? 0) + 1;
}
for (let ch of t) {
if (map[ch]) {
map[ch] -= 1;
}
}
let ans = Object.values(map).every((item) => item === 0);
console.log(ans);
return ans;
};
isAnagram("anagram", "nagaram");
isAnagram("rat", "car");
349.两个数组的交集
var intersection = function (nums1, nums2) {
const sets = new Set(nums1);
const ans = new Set();
for (let i = 0; i < nums2.length; i++) {
if (sets.has(nums2[i])) {
ans.add(nums2[i]);
}
}
console.log([...ans]);
return [...ans];
};
intersection([1, 2, 2, 1], [2, 2]);
49. 字母异位词分组
var groupAnagrams = function (strs) {
const map = new Map();
for (let str of strs) {
const key = str.split("").sort().join();
if (map.has(key)) {
map.get(key).push(str);
} else {
map.set(key, [str]);
}
}
console.log([...map.values()]);
return [...map.values()];
};
groupAnagrams(["a"]);