leetcode探索哈希表(一)
哈希表是一种数据结构,它使用哈希函数组织数据,以支持快速插入和搜索
两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
代码:
class Solution {public int[] intersection(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;Set<Integer> list = new HashSet<>();for(Integer num :len1>len2?nums2:nums1){//把较长的数组添加到set中去除重复list.add(num);}Set<Integer> res = new HashSet<>();for(int num:len1>len2?nums1:nums2){if(list.contains(num)){res.add(num);}}//set类型转int数组int[] arr = new int[res.size()];int i=0;for(Integer r:res){arr[i++] = r;}return arr;}
}
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];Map<Integer,Integer> hashMap = new HashMap<Integer,Integer>();for(int i=0;i<nums.length;i++){hashMap.put(nums[i],i);//key为值,value为下标}for(int i=0;i<nums.length;i++) {if(hashMap.containsKey(target-nums[i])&&hashMap.get(target-nums[i])!=i) {res[0] = i;res[1] = hashMap.get(target-nums[i]);break;}}return res;}
}
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
class Solution {public int firstUniqChar(String s) {Map<Character, Integer> map = new HashMap<Character, Integer>();char[] arr = s.toCharArray();for(int i=0;i<arr.length;i++){if(map.containsKey(arr[i])){map.put(arr[i],map.get(arr[i])+1);}else{map.put(arr[i],1);}}for (int i = 0; i < s.length(); i++) {if (map.get(arr[i]) == 1){return i;}}return -1;}
}
leetcode探索哈希表(一)相关推荐
- LeetCode Cookbook 哈希表(collections.Counter()和collections.defaultdict())
好久不更了,这次一鼓作气,学完它! 文章目录 LeetCode Cookbook 哈希表 30. 串联所有单词的子串 36. 有效的数独(很不错的循环题目) 49. 字母异位词分组 290. 单词规律 ...
- 趣味算法——探索哈希表的神秘世界
文章目录 前言: 一.哈希表的魔力 二.哈希表的灵魂--哈希函数 1. 什么是哈希函数 2. 哈希函数的特性 3. 哈希冲突 三.解决冲突的艺术 1. 开放寻址法 2. 链地址法 3. 冲突解决策略的 ...
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
- 七十五、Python | Leetcode哈希表系列
@Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- python leetcode_七十五、Python | Leetcode哈希表系列
@Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之上——原理与设计
哈希表(Hash table,也叫散列表),是根据键(Key)而直接访问数据在内存中的储存位置(又叫做存储桶,Buckets)的数据结构.也就是说,它通过计算一个关于键值的函数(哈希函数,Hash f ...
- LeetCode 890. 查找和替换模式(哈希表)
1. 题目 你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配. 如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们 ...
- LeetCode 1171. 从链表中删去总和值为零的连续节点(哈希表)
1. 题目 给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止. 删除完毕后,请你返回最终结果链表的头节点. 你可以返回任何 ...
- 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)
文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
最新文章
- 鸟哥的Linux私房菜10.16 vim程序编辑器
- max点缓存烘焙帧_深入理解浏览器的缓存机制
- EasyX实现推箱子游戏
- Mybatis实现多表关联多条件查询
- 体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景
- 小米路由器4Q的设置
- 赞!15个来自 CodePen 的酷炫 CSS 动画效果
- leetcode338 比特位计数
- 在Windows和Azure中使用加密证书提高web.config的安全性
- 关联分析在企业风控策略中的应用
- model存数据_数据库内核杂谈 存储
- anaconda升级sklearn版本
- 基于电子商务网站开发的项目管理计划设计
- 分布式服务架构读书笔记-第六章 Java服务的线上应急和技术攻关
- PC-红警联机问题与下载
- Pandas:写了一个简易的销量异常检测器
- switch相关系列
- 前后端交互必备之js数组方法大全
- 易客多快排系统部署教程
- 世间安得双全法,不负如来不负卿