每日三道算法题之(哈希表)

2022.2.3
1.哈希表理论基础
首先我们需要理解的就是什么是哈希表,在这个过程当中,数组其实就是哈希表,我们一般是通过哈希函数来做出对应的索引,也就是相应的hashcode,可以将其数据转化为不同的数值,这样就把学生映射为哈希表上的索引了。
1.2.有效的字母异位词
在这里插入图片描述

1.1题目分分析
首先这道题目我们想到的就是用到ASCII码来解决问题,那么如何来进行解决呢,那就是通过两个数组,首先第一个数组中的进行加减,然后就是第二个数组
class Solution {
public boolean isAnagram(String s, String t) {

    int[] record=new int[26];
    for(char c:s.toCharArray()){
        record[c-'a']+=1;
    }
    for(char c:t.toCharArray()){
        record[c-'a']-=1;
    }
    for(int i:record){
        if(i!=0){
            return false;
        }
    }
    return true;
}

}

2.两个数组的交集
在这里插入图片描述

首先我们需要做的就是看到这种求数组中重复的东西,首先想到的就是用到哈希表,
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1null || nums2null || nums1.length0 || nums2.length0){
return new int[0];
}
//这里首先就是不能用到数组,而是用set,因为set是没有界限的,所以可以用到
Set hashset1=new HashSet<>();
Set hashset2=new HashSet<>();
//首先就是将nums1这个数组通过遍历来放入Set表中
for(int i:nums1){
hashset1.add(i);
}
//接下来就是
for(int i:nums2){
if(hashset1.contains(i)){
hashset2.add(i);//这个就是进行判断对应的nums2
}
}

  //建立一个对应的数组
  
  int[] RessAr=new int[hashset2.size()];
  int index=0;
  for(int i:hashset2){
      RessAr[index++]=i;//这个就是将对应的数组进行一个添加
  }
  return RessAr;

}

}
3.快乐数

在这里插入图片描述

解题思路:
首先我们需要做的就是将这个快乐数进行判断,首先就是每一次进行的乘除代表的就是不同的数组,所以
这个时候很需要一个哈希表来进行数据的存储
class Solution {
public boolean isHappy(int n) {

//首先我们就是需要Set来进行存储
Set record=new HashSet<>();
while(n!=1 && !record.contains(n)){
record.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;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值