![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题之哈希表
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
剑指 Offer II 119. 最长连续序--关于数组去重的解法
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。这个题乍一看要动态规划,其实不能用,因为他没有可以推导的关系式。其实最开始想到的就是先排序,然后从左往右遍历,比如用下面这个代码,如果没有排序后去重这一步,就会导致错误,因为比如0 1 1 2 。在到第二个1的时候cnt重新置1了。当然我们可以改成这样,对是否是重复的进行原创 2022-06-15 16:34:50 · 228 阅读 · 0 评论 -
1539.第K个缺失的正整数
给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。请你找到这个数组里第 k 个缺失的正整数。示例 1:输入:arr = [2,3,4,7,11], k = 5输出:9解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,…] 。第 5 个缺失的正整数为 9 。我的想法:用一个2000个长的map存储数字出现的次数,出现为0就是缺失的。然后遍历它,第K个缺失的就是那个哈希下标。class Solution {public: int findKthPositive原创 2021-03-16 22:02:11 · 200 阅读 · 0 评论 -
204.计数质数
统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 * 1061.暴力法双重循环,结果显而易见,超出时间限制,因为N实在是太大了。class Solution {public: int countPrimes(int n) { int cnt=0;原创 2021-03-16 21:14:32 · 109 阅读 · 0 评论 -
1、两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。直接上代码:class Solution {public: vector<i原创 2021-03-15 18:21:36 · 2273 阅读 · 1 评论 -
1160.拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words = [“cat”,“bt”,“hat”,“tree”], chars = “atach”输出:6解释:可以形成字符串原创 2021-03-14 21:21:02 · 58 阅读 · 0 评论 -
884.两句话中的不常见单词
给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。您可以按任何顺序返回列表。示例 1:输入:A = “this apple is sweet”, B = “this apple is sour”输出:[“sweet”,“sour”]示例 2:输入:A = “apple apple”, B = “banana”输出:[“banana”]原创 2021-03-14 20:09:34 · 74 阅读 · 0 评论 -
136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1看到这个题目,很容易想到建立一个频次数组,记录出现的次数,为1的找出来,但是题目不允许额外空间。这里提供一种新思路,位运算-异或,只要题目说不占用额外内存就要警惕。// 异或 ⊕ 的特性// 0 异或 x = x // b 异或 b = 0代码:class Solu原创 2021-03-14 16:55:58 · 70 阅读 · 0 评论 -
1748.唯一元素的和
给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回 nums 中唯一元素的 和 。示例 1:输入:nums = [1,2,3,2]输出:4解释:唯一元素为 [1,3] ,和为 4 。提示:1 <= nums.length <= 1001 <= nums[i] <= 1001、暴力法一看到这个题目,首先就想到暴力法遍历,每次定位一个元素,就遍历其余看是否有相等的元素,如果有,加到结果中,没有定位下一个元素。时间复杂度O(N*N)原创 2021-03-13 22:11:51 · 156 阅读 · 0 评论 -
463.岛屿的周长
给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。...原创 2021-03-13 21:22:33 · 58 阅读 · 0 评论 -
1365.有多少数字小于当前数字
1、暴力双重循环,外循环遍历每个元素,内循环看有多少个元素小于当前元素。class Solution {public: vector<int> smallerNumbersThanCurrent(vector<int>& nums) { int n=nums.size(); vector<int>ans(n); int count=0; for(int i=0;i<n;i++)原创 2021-03-12 15:59:11 · 82 阅读 · 0 评论 -
706设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。示例:MyHashMap hashMap = new MyHashMap();hashMap.put(1, 1);hashMap.put(2, 2);hashMap.get(1原创 2021-03-11 19:30:18 · 104 阅读 · 0 评论