
哈希表
cx_cs
这个作者很懒,什么都没留下…
展开
-
454. 四数相加 II
要求:四个数组的数相加为0 思路:不能用指针了,用两个哈希表 class Solution { public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { unordered_map<int, int> countAB; for (int u: A) {原创 2022-04-18 13:40:54 · 105 阅读 · 0 评论 -
380. O(1) 时间插入、删除和获取随机元素
要求:rt,要O(1) 思路:哈希标不能随机获取,遍历是O(n),所以要搞个数组,哈希存数的下标 class RandomizedSet { public: RandomizedSet() { srand((unsigned)time(NULL)); } bool insert(int val) { if (indices.count(val)) { return false; } in原创 2022-04-18 12:32:26 · 106 阅读 · 0 评论 -
350. 两个数组的交集 II
要求:求交集 思路:哈希标或者排序双指针,磁盘读不完不能排序 class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { if(nums1.size() > nums2.size()) return intersect(nums2, nums1); map<int, int> m;原创 2022-04-18 12:10:44 · 187 阅读 · 0 评论 -
49. 字母异位词分组
要求:abc,acb归为一组 思路:映射vector(26)到vector,映射数字不行因为bd和aacc一样,质数相乘也不行会爆 class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { map<vector<int>,vector<string>> m; for(strin原创 2022-03-19 12:09:20 · 136 阅读 · 0 评论 -
面试题50. 第一个只出现一次的字符
要求:rt 思路:存索引第二次不用遍历字符串 class Solution { public: char firstUniqChar(string s) { unordered_map<int,int> m; for(int i=0;i<s.length();++i){ if(m.count(s[i]))m[s[i]]=-1; else m[s[i]]=i; } int原创 2022-03-12 13:38:33 · 1123 阅读 · 0 评论 -
128. 最长连续序列
要求:连续的数字,最长长度,O(n) 思路:哈希表,注意从序列最左边开始即可 class Solution { public: int longestConsecutive(vector<int>& nums) { unordered_map<int,int> m; for(int &num:nums) m[num]=1; int ans=0; for(auto [key,原创 2022-01-19 18:12:08 · 249 阅读 · 0 评论 -
594. 最长和谐子序列
要求:差为1两个数最大出现次数 思路: class Solution { public: int findLHS(vector<int>& nums) { unordered_map<int,int> m; for(int &num:nums) m[num]++; int ans=0; for(auto [key,val]:m){ if(m.coun原创 2022-01-19 17:37:52 · 58 阅读 · 0 评论 -
217. 存在重复元素
要求:rt 思路:哈希表 class Solution { public: bool containsDuplicate(vector<int>& nums) { unordered_map<int,int> m; for(int &num:nums){ if(m.count(num))return true; m[num]=1; } return原创 2022-01-19 17:26:18 · 65 阅读 · 0 评论 -
1. 两数之和
要求:rt 思路:要么排序双指针,要么哈希 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> m; for(int i=0;i<nums.size();++i){ if(m.count(target-nums[i]))return{m[target原创 2022-01-19 17:21:46 · 159 阅读 · 0 评论