242、有效的字母异位词
题目链接:有效的字母异位词
这道题考的是哈希表,通过将两个数组当成哈希表的下标,当出现一次下标后就哈希表值自增,而遍历第二个数组时就自减,如果哈希表为0,就说明这是有效字母异位。而对于这道题我一开始先学习了哈希表后,第一个想到的是用他们的ASCII码,但是相同的ASCII码会有不同的元素构成。
class Solution {
public boolean isAnagram(String s, String t) {
int [] hasharr=new int [26];
char [] a=s.toCharArray();
char[] b=t.toCharArray();
for(char i:a)
{
hasharr[i-'a']++;
}
for(char j:b)
{
hasharr[j-'a']--;
}
for(int f:hasharr)
{
if(f!=0)
{
return false;
}
}
return true;
}
}
349、两个数组的交集
题目链接:两个数组的交集
这个我想了好久,我的想法是当遍历第1个数组时设定限制条件,每个元素的哈希值都不能大于1,遍历第二个数组时设定只有当前数组元素在哈希表中的值为1的才可以被录入哈希表,最后返回哈希表值为2的下标。注意:小心溢出
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int [] hasharr=new int [1001];
for(int i:nums1)
{
if(hasharr[i]<1)
{
hasharr[i]++;
}
}
int m=0;
for(int j:nums2)
{
if(hasharr[j]==1)
{
hasharr[j]++;
m++;
}
}
int [] hashp=new int [m];
for(int k=0;k<hasharr.length;k++)
{
if(hasharr[k]==2)
{
hashp[--m]=k;
}
}
return hashp;
}
}
202、快乐数
题目链接:快乐数
老实说,这个快乐数真的让人不快乐、这个我想了好久。第一要求出每个位的平方之和,第二要将其放入哈希表中,如果出现了无限循环,也就是哈希表中有值是大于1的就不是快乐数。
class Solution {
public boolean isHappy(int n) {
Set<Integer> set=new HashSet<>();
while(n!=1)
{
if(set.contains(n))
{
return false;
}
set.add(n);
n=geshuhe(n);
}
return true;
}
int geshuhe(int f)
{
int sum=0;
while(f>0)
{
sum+=(f%10)*(f%10);
f=f/10;
}
return sum;
}
}
1.两数之和
题目链接:两数之和
这道题是老盆友了,今天用的是哈希map来解决的,通过hashmap的键值对将遍历过的值存储起来,在不断先前遍历的过程中,判断是否后面有值是可以相加为目标值,若没有,则将其存入hashmap中。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map=new HashMap();
int m=0;
int [] arr=new int [2];
for(int i=0;i<nums.length;i++)
{
m=target-nums[i];//数组的值为键
if(map.containsKey(m))//获得键的值=下标
{
arr[0]=i;
arr[1]=map.get(m);
}
map.put(nums[i],i);
}
return arr;
}
}
总结:今天学习了哈希表,平日里对于哈希表只是一知半解,今天算是有一个较为清晰的理解了,只不过是第一次用哈希表解题,写的时间很长。