数据结构-哈希表map
数据结构-哈希表map
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode560——Subarray Sum Equals K
题目大意:求出元素和等于K的所有子数组个数分析:代码:原创 2020-04-02 12:32:04 · 123 阅读 · 0 评论 -
leetcode438——Find All Anagrams in a String
题目大意:在字符串s中找出字符串p的所有字母异位词的首字母下标(字母相同,排列不同的字符串)分析:滑动窗口双指针+哈希表。类似leetcode76。遇到子串匹配的问题基本就用滑动窗口解决。leetcode76:s中找到最短子串,使得包含p中所有字母。本题:s中找到与p长度相同的子串,使得包含p中所有字母。所以只需要再76的基础上改动,不需要维护最小长度了。当找到满足76的子串时,只需要...原创 2020-03-27 10:22:07 · 88 阅读 · 0 评论 -
leetcode253——Meeting Rooms II
题目大意:给出一些会议的开始和结束时间,求出需要的最少会议室个数分析:map。和leetcode732其实是一道题。都是区间重叠问题,732是求最大重叠数,而这道题中需要的最少会议室个数其实就是区间最大重叠数。用一个map(自动排序)记录端点的出入度,遍历map的过程中得到的端点度的加和最大值就是最大重叠数。代码:class Solution {public: int ...原创 2020-03-16 10:28:11 · 386 阅读 · 0 评论 -
leetcode732——My Calendar III
题目大意:给出一系列线段,求出每加入一个线段时的最大重叠线段数分析:线段起始点出度+1,终点入度+1(出度-1),每加入一条边就遍历一次map中的点,由于map自带排序功能,所以遍历时是按数轴顺序遍历每个点的度,每次遍历时总出度所能达到的最大值就是最大重叠线段数。大致思路就是每出现一个起点就代表有一个新的线段,而一个终点的出现就意味着有一条线段结束,那么在结束之前(出度减一之前)出度所达到的最...原创 2018-03-17 21:34:04 · 293 阅读 · 0 评论 -
leetcode3——Longest Substring Without Repeating Characters
题目大意:给出一个字符串,求出最长不重复子串的长度。也就是要求子串必须连续,且子串中的字符不重复。分析:字符串和哈希表的考察。提到重复,就会想到用map或者哈希表求解。维持两个指针i和j,j不断向后遍历字符串,出现重复字符时(用set哈希表来判断是否已出现过),移动i指向j所指字符上一次出现的位置的下一个字符,这样就保证ij之间就是我们要求的不重复子串,求出这样的子串的最大值即可。代码:...原创 2018-04-03 17:03:28 · 101 阅读 · 0 评论 -
poj2503——Babelfish
题目大意:给出一本字典,将一段话翻译成英文输入:(字典中有很多个词条,不超过100000个) 第i个词条的英文 外文(每个单词不超过10个字母) 一段话(每个外文单词占一行,不超过100000个单词)输出:这段话的翻译(每个英文单词占一行)分析:哈希表代码:转载自https://www.cnblogs...原创 2017-12-03 22:14:49 · 166 阅读 · 0 评论 -
poj1840——Eqs
题目大意:a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0,(ai∈[-50,50] xi∈[-50,0)∪(0,50])给出五个系数,求出解的个数输入:a1 a2 a3 a4 a5输出:解的个数分析:暴力枚举肯定超时,所以对方程做一个变形: 即先枚举x1、x2,记录打表,再枚举x3、x4、x5,若左右相等就得...原创 2017-12-03 20:41:26 · 155 阅读 · 0 评论 -
leetcode138——Copy List with Random Pointer
题目大意:代码:原创 2020-02-26 12:08:28 · 109 阅读 · 0 评论 -
leetcode146——LRU Cache
题目大意:设计数据结构实现LRU缓存机制,使得页面访问和置换的时间复杂度均为O(1)。分析:哈希表+双向链表。哈希表查找O(1),双向链表插入/删除O(1),满足题意要求。双向链表的每个结点为一个页面pair<key,value>,队首为最新访问过的页面,队尾则为“最近最少”访问的页面,所以当页面数量到达缓存容量时,删去尾结点即可。代码:转载自https://leetcod...原创 2020-03-02 10:58:43 · 172 阅读 · 0 评论 -
leetcode133——Clone Graph
题目大意:生成无向简单图的克隆图(图结构相同,结点是新建的)分析:DFS+MAP。DFS的趴很好思考,就是克隆当前结点,然后遍历它的邻接表dfs克隆即可。但是涉及一个问题——需要防止重复克隆同一个结点。所以需要类似visit数组一样的数据结构进行标记。采用map<key,value>=map<node,newNode>,记录node的克隆结点。访问node时...原创 2020-02-22 12:45:51 · 96 阅读 · 0 评论 -
leetcode76——Minimum Window Substring
题目大意:在字符串s中找出最短子串,使他包含字符串t中的所有字符(可以不按t中字符顺序,只要包含即可)分析:哈希表、字符串考察。滑动窗口方法。将字符串t中的字符储存在哈希表中,遍历字符串s,用left和right指针维持滑动窗口左右界限,right右滑找到在t中存在的字符,该字符对应的哈希值减一,如果滑动窗口中找到的字符数量和t的长度相等就说明找到了一个答案,更新即可。代码:clas...原创 2018-05-20 10:58:14 · 143 阅读 · 0 评论 -
leetcode336——Palindrome Pairs
题目大意:给出字符串数组,求出其中两两连接可以形成回文串的字符串对分析:字符串、哈希表。暴力枚举n²超时,利用哈希表遍历一次就能得到答案。将数组中的每个字符串逆序后存入哈希表,哈希值是字符串的原下标,然后遍历数组中的字符串,将字符串任意分成两部分,有两种情况: 1.字符串的左一部分(前缀)在哈希表中可以找到,并且右一部分(后缀)是回文串:说明这个字符串与在哈希表中找到...原创 2018-07-31 18:58:10 · 234 阅读 · 0 评论 -
leetcode697——Degree of an Array
题目大意:找出数组中出现频率最高的数所在的子数组的最小长度分析:数据结构的考察。我们需要记录每个数第一次和最后一次出现的位置,如果在这两个位置之间数字出现次数等于原数组最高频数字的出现次数,那么这就找到了一个候选子数组,也就是说最终答案就是候选子数组中最短的一个。代码:转载自https://blog.csdn.net/sinat_31790817/article/details/78349...原创 2018-07-28 15:49:18 · 194 阅读 · 0 评论 -
leetcode49——Group Anagrams
题目大意:在给出的字符串数组中,将字母颠倒顺序后相同的单词归类分析:map的考察。将所有单词中的字母sort排序,排序后的单词作为map的键,排序前的单词加入该键的值(vector容器)中,然后遍历map按键输出即可。代码:class Solution {public: vector<vector<string>> groupAnagrams(vec...原创 2018-04-20 16:27:09 · 120 阅读 · 0 评论 -
leetcode1——Two Sum
题目大意:给出一个数组,和一个目标数值,求出数组中是否有两个数相加能得到目标数值,结果返回两个加数在数组中的下标分析:暴力/Map的应用 普通暴力求解是O(n²),两重循环判断两数相加是否等于目标值即可。 也可以遍历一次就找到答案,利用map存储查找,也就是遍历到一个数时我们直接能够计算出对于目标值来说的另一个加数是多少,然后我们只需要在map中查询...原创 2018-04-03 13:43:35 · 167 阅读 · 0 评论