![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode哈希表
LeetCode哈希表
overlordmax
这个作者很懒,什么都没留下…
展开
-
670. 最大交换
1.题目描述给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :示例 2 :注意:1.给定数字的范围是 [0, 108]2.思路1.把数字转化为字符串2.用哈希表记录每个字符最后一次出现的索引i3.遍历字符串,对于每个字符,查找该字符右边比它大的数字,为了找到最大的比该字符大的数字,从9开始倒序查找,并进行交换。3.代码class Solution {public: int maximumSwap(int num) {原创 2021-02-21 23:14:30 · 89 阅读 · 0 评论 -
350. 两个数组的交集 II
1.题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:示例 2:说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?2.思路(哈希表)由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储原创 2021-01-31 21:59:04 · 167 阅读 · 0 评论 -
767. 重构字符串
1.题目描述给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:示例 2:注意:S 只包含小写字母并且长度在[1, 500]区间内。2.思路1.如果要使得两相邻的字符不同,那么出现次数最多的那个数的数量必须满足下面条件,如下图所示,比如下面的a是出现次数最多的2.这个时候a的数量已经达到了临界值,如果再多一个 a ,那么至少有两个 a 是相邻的。所以这里出现次数最多的那个字符数量的临界值是threshol原创 2021-01-20 16:57:30 · 68 阅读 · 0 评论 -
349. 两个数组的交集
1.题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:示例 2:说明:1.输出结果中的每个元素一定是唯一的。2.我们可以不考虑输出结果的顺序。2.方法1分别遍历两个数组并用set保存每个数组的元素,元素较少的set记为s1,元素较多的set记为s2,遍历s1并查找当前遍历的元素是否存在于s2中,如果存在就加入结果数组。3.代码class Solution {public: vector<int> intersection(vector<int&原创 2021-01-12 16:05:58 · 67 阅读 · 0 评论 -
128. 最长连续序列
1.题目描述给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:2.思路(哈希表) 考虑枚举数组中的每个数 x,考虑以其为起点,不断尝试匹配x+1,x+2,⋯ 是否存在,假设最长匹配到了 x+y,那么以 x 为起点的最长连续序列即为 x, x,x+1,x+2,⋯,x+y,其长度为 y+1,不断枚举并更新答案即可。 对于匹配的过程,暴力的方法是 O(n) 遍历数组去看是否存在这个数,但其实更高效的方法是用一个哈希表存储数组中的数,这样查看一个数是否存在即原创 2020-07-05 13:28:35 · 3075 阅读 · 0 评论 -
594. 最长和谐子序列
1.题目描述和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。示例 1:说明: 输入的数组长度最大不超过20,000.2.思路(哈希映射)对于当前枚举的元素 x,它可以和 x + 1 组成和谐子序列。用哈希表保存数组每个值出现的次数,再遍历一遍整个数组,找出等于 x 和 x + 1 的出现次数,并找出x和x + 1出现次数之和的最大值,最大值就是最长和谐子序列的长度。3.代码class Solutio原创 2020-07-04 23:21:28 · 246 阅读 · 0 评论 -
219. 存在重复元素 II
1.题目描述给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:示例 2:示例 3:2.思路(散列表)遍历数组,对于每个元素做以下操作:1.在散列表中搜索当前元素,如果找到了就返回 true。2.在散列表中插入当前元素。3.如果当前散列表的大小超过了 k, 删除散列表中最旧的元素。否则返回false。3.代码class Solution {publi原创 2020-07-04 21:20:48 · 190 阅读 · 0 评论 -
217. 存在重复元素
1.题目描述给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:示例 2:示例 3:2.思路(set)set具备的两个特点:1.set中的元素都是排序好的2.set中的元素都是唯一的,没有重复的因此遍历数字,把每个元素insert进set,当set的大小小于数组的大小时,说明存在重复元素。3.代码class Solution {public:原创 2020-07-04 20:39:15 · 72 阅读 · 0 评论