首页 > 其他分享 > day6 | 哈希表(1)

day6 | 哈希表(1)

时间:2023-02-16 22:35:35浏览次数:39  
标签:哈希 nums day6 int 数组 new nums1 record

什么时候能用到哈希表呢?

给你一个元素,判断这个元素在集合中是否出现过。

什么时候用set?

数值很大,数值分布很分散,用数组下标来进行映射就会浪费很大的存储空间

 

题目链接:242. 有效的字母异位词 - 力扣(LeetCode)

题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词

解题思路:参考文章:代码随想录 (programmercarl.com)

 1 class Solution {
 2     public boolean isAnagram(String s, String t) {
 3         //创建一个record数组,用于记录每个字符串中字母出现的个数
 4         int[] record = new int[26];
 5         for (int i = 0 ;i < s.length();i++){
 6             record[s.charAt(i)-'a']++;
 7         }
 8         for (int j =0 ;j<t.length();j++){
 9             record[t.charAt(j)-'a']--;
10         }
11         for(int i = 0;i<26;i++){
12             if(record[i]!=0) return false;
13         }
14         return true;
15     }
16 }

 

 

题目链接:349. 两个数组的交集 - 力扣(LeetCode)

题目描述:给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

解题思路:

 1 class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         if (nums1 == null || nums2==null){
 4             return new int[0];
 5         }
 6         //创建两个set,一个用于存储nums1中所有的数据,即set1;
 7         //一个用于存储两个数组交集的数据,即reSet
 8         Set<Integer> set1 = new HashSet<>();
 9         Set<Integer> reSet = new HashSet<>();
10         //遍历nums1
11         for(int i : nums1){
12             set1.add(i); //add函数,是java.util.Set接口中的函数,如果 set 中尚未存在指定的元素,则添加此元素
13         }
14         for (int i : nums2){
15             if(set1.contains(i)){// contains(): 如果 set 包含指定的元素,则返回 true。
16                 reSet.add(i);
17             }
18         }
19         //将结果几何转换为数组
20         return reSet.stream().mapToInt(x -> x).toArray();
21     }
22 }

 

题目链接:202. 快乐数 - 力扣(LeetCode)

题目描述:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

解题思路:  

 1 class Solution {
 2     //取数字各个位上的单数之和
 3     public int getSum(int n){
 4             int sum=0;
 5             while(n>0){
 6                 sum += (n%10)*(n%10);
 7                 n/=10;
 8             }
 9             return sum;
10         }
11     public boolean isHappy(int n) {
12         Set<Integer> record=new HashSet<>();
13         while (n!=1 && !record.contains(n)){
14             //当集合中重复出现sum或者sum=1时会跳出循环
15             record.add(n);
16             n=getSum(n);
17         }
18         return n==1;
19     }
20 }

 

题目链接:1. 两数之和 - 力扣(LeetCode)

题目描述:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

解题思路:

1.创建一个map集合,用于保存遍历过的数据

2.遍历数组nums[ ],如果找到  temp = target-nums[i] map集合中有temp,说明map集合中有一个加数能与当前的nums[i]相加得到target满足题意。

3.如果map中没有符合条件的key,就把当前的 nums[i] 存入map中。

 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         //创建数组,用于保存输出结果
 4         int[] res = new int[2];
 5         if(nums==null||nums.length==0){
 6             return res;
 7         }
 8         Map<Integer,Integer> map = new HashMap<>();
 9         for(int i=0 ; i<nums.length ; i++){
10             int temp = target-nums[i];
11             if(map.containsKey(temp)){//如果在map中能够找到匹配的key
12                 res[0]=map.get(temp);//res[key(元素),value(下标)]
13                 res[1]=i;
14                 break;
15             }
16             map.put(nums[i],i);
17         }
18     return res;
19     }
20 }

 

标签:哈希,nums,day6,int,数组,new,nums1,record
From: https://www.cnblogs.com/inbreak/p/17056700.html

相关文章

  • java 哈希值
    java哈希值           ......
  • 转:图片哈希概论及python中如何实现对比两张相似的图片
    Google以图搜图的原理,其中的获取图片hash值的方法就是AHash。每张图片都可以通过某种算法得到一个hash值,称为图片指纹,两张指纹相近的图片可以认为是相似图片。以图......
  • acwing 我在哪?(字符串哈希)
    原题链接题解分析设答案为ans,那么大于ans,肯定不成立,小于ans成立,这符合二分答案的特点然后使用unordered_set和substr进行查重substr:第一个参数为开始项,第二个参数......
  • 黑苹果提示宗卷哈希值不匹配的问题
    原文来源于黑果魏叔官网,转载需注明出处。提示系统所在宗卷哈希值不匹配的错误,开机后会不定时出现。发生在monterey12系统,而且有蓝牙设备的笔记本和台式机上。目前没有发现......
  • 有效的字母异位词(力扣简单哈希表题)
    题目:给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。注意:若*s*和*t*中每个字符出现的次数都相同,则称*s*和*t*互为字母异位词。思......
  • 赎金信(力扣标准哈希表计数题)
    题目:给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ra......
  • 哈希表
     classSolution{public:vector<int>intersect(vector<int>&nums1,vector<int>&nums2){if(nums1.size()>nums2.size()){return......
  • Java基础day6复习-Debug的学习
    1.Debug模式1.1什么是Debug模式是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。1.2Debug模式操作流程如何加断点......
  • 哈希学习笔记
    板:P3370【模板】字符串哈希复杂度:O(n)用途:将一串字符串映射到一个数怎么写?选取一个较小质数p选取一个较大质数mod1将字符串转换成一个p进制在mod1定义下的......
  • springboot 配置redis集群 JedisCluster 3主3从 哈希槽模式
    packagecom.estate.util;importredis.clients.jedis.*;importjava.util.HashSet;importjava.util.Set;publicclassRedisClient{privatestaticJedis......