今天学习哈希表,哈希表可以用来判断是否出现过这个元素,典型的哈希结构有三种:数组、set和map,他们使用的情况不同:

  • 数组:适合元素有范围限制,且数据并不是很大
  • set:适合数据差异比较大的数据,并不是连续分布
  • map:适合存放一对数据

1.力扣242

本题利用哈希法中数组结构来解决问题,定义一个数组来记录元素出现的次数,接着再判断下一个字符串出现的次数,若出现则把数组对应元素的位置-1操作,最终判断元素是否有剩余。

解题步骤:

  • 因为题目中给定限制,元素都是小写字母,所以定义一个26个英文字母,用来记录出现次数
  • 遍历第一个字符串,让arr[s.charAt(i)-'a']++操作,即出现次数+1
  • 遍历第二个字符串,让arr[s.charAt(i)-'a']--操作,即出现次数-1
  • 最终遍历res数组,若数组中的值出现不为0时,则返回false

代码如下:

    public boolean isAnagram(String s, String t) {int[] arr = new int[26];for(int i=0;i<s.length();i++){arr[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++){arr[t.charAt(i)-'a']--;}for(int i=0;i<arr.length;i++){if(arr[i]!=0){return false;}}return true;}

2.力扣349

本题利用哈希表中的set结合解决此问题,遍历第一个数组,将结果存进set中,然后遍历第二个数组,若set结合中出现次元素,则存进结果set结合中,达到结果去重的效果。

解题步骤:

  • 定义两个set,第一个set对nums1数组进行去重存储,第二个set存结果集
  • 首先遍历nums1将结果存进set中
  • 再遍历nums2,判断此数值在set中是否出现,若出现则存进结果集中
  • 将set集合转为数组

代码如下:

    public int[] intersection(int[] nums1, int[] nums2) {Set<Integer>  temp = new HashSet();Set<Integer>  res = new HashSet();for(int i=0;i<nums1.length;i++){temp.add(nums1[i]);}for(int i=0;i<nums2.length;i++){if(temp.contains(nums2[i])){res.add(nums2[i]);}}return res.stream().mapToInt(x -> x).toArray();}

3.力扣202

本题利用哈希表中的set集合进行去重存储,以此防止死循环产生,在每次循环的时候怕判断此数是否出现在set中,若出现则表示死循环产生,并退出。

解题步骤:

  • 首先判断此数是否出现在set中,若出现则表示死循环产生,并退出。
  • 若没出现则将次数分解平方,返回数值,进行下次循环

代码如下:

    public boolean isHappy(int n) {HashSet<Integer> set = new HashSet();while(n!=1&&!set.contains(n)){set.add(n);n=getNextNumber(n);}return n==1;}public int getNextNumber(int n) {int res = 0;while(n>0){int temp = n%10;res+=temp*temp;n=n/10;}return res;}

4.力扣1

本题利用哈希表中的map集合,这题不仅要判断是否出现过,且要返回元素对应得下标。

解题步骤:

  • 首先定义一个map集合,key:存放元素得值,value:存放元素下标
  • 利用for循环遍历整个数组
  • 判断target-nums【i】是否出现在map中,若出现直接返回下标值

代码如下:

    public int[] twoSum(int[] nums, int target) {HashMap<Integer,Integer> map = new HashMap();for(int i=0;i<nums.length;i++){int mid = target-nums[i];if(map.containsKey(mid)){return new int[]{i,map.get(mid)};}map.put(nums[i],i);}return null;}

day5有效字母得移位两个数组的交集快乐数两个数之和相关推荐

  1. 小白刷代码随想录day6 -- 242.有效的字母异位词,349.两个数组的交集,202快乐数,1.两数之和

    今天是刷代码随想录的day6.昨天day5元宵节休息日.今天开始了哈希表部分.对于哈希表的内容之前没有怎么学习过,所以今天的刷题主要以学习方法为主.待二刷的时候争取能够手撕代码! 哈希法 首先一个大前 ...

  2. 反转字符串、反转字符串中的元音字母、两个数组的交集,springboot工作原理面试

    小编菜解 public static String reverseVowels(String s) { List list = new ArrayList() {{ add('a'); add('e' ...

  3. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  4. 两个数组的交集 II

    两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...

  5. 350. Intersection of Two Arrays II 两个数组的交集 II

    Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...

  6. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)

    示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...

  7. Leetcode-数据结构-350. 两个数组的交集 II

    问题 给两个整数数组 nums1 和 nums2 ,请以 数组形式 返回两数组的 交集 (其在交集中出现的次数:等于该数字在两个数组中出现次数的最小值). 返回结果中 每个元素出现的次数(for遍历) ...

  8. L349. L350两个数组的交集

    两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = ...

  9. Day 06 | 242.有效的字母异位词 349. 两个数组的交集 202.快乐数 1. 两数之和

    这四道题之前都做过!比第一次顺利一些,不过还是得看题解,磕磕绊绊的.不过我相信坚持下去一定会越来越好滴! 242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 ...

最新文章

  1. java 基础知识八 正则表达式
  2. WEB应用之网页数据分析工具
  3. c3p0、dbcp、druid三大连接池对比
  4. 操作系统(四)操作系统的运行机制
  5. 清华大学人工智能研究院成立智能信息获取研究中心
  6. python给出数据点进行插值_Python对数据进行插值和下采样的方法
  7. 关于Dapper实现读写分离的个人思考
  8. leetcode 455. 分发饼干(贪心算法)
  9. 【ES6】let命令、const命令、解构赋值
  10. jdk自带压测工具_jstack性能分析工具
  11. mysql 分组统计 取最大值_(Mysql)sql分组取最大值问题
  12. 【数学建模】CUMCM-2010A 储油罐的变位识别与罐容表标定 解题思路整理
  13. D版力控加密狗使用有感
  14. web网页设计实例作业 ——中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计...
  15. 花生壳内网发布外网可以访问的网站
  16. ssh-keygen认证密钥
  17. 数据库上机实验一、二
  18. VC++ 中主线程等待子线程结束的方法
  19. 计算机点击应用时总是跳到顶端,电脑总是跳出当前应用程序
  20. Appium 自动化测试 手机操作

热门文章

  1. c语言get()的作用,c语言get函数的用法有哪些
  2. UniApp文件上传
  3. web前端-微信小程序开发学习
  4. uni-app视频保存到本地/相册
  5. CentOS 5设置千兆网卡
  6. JPG图片在线翻译的操作方法
  7. 天池新人赛之新浪微博互动预测
  8. 22.1.2是否存在三升序列
  9. 怎样使PPT自动播放
  10. 简介 IndexedDB 及详解 IndexedDB 在实际项目中可能存在的问题与解决方案