哈希表理论基础
202. 快乐数什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 这句话很重要,大家在做哈希表题目都要思考这句话。
如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!
242.有效的字母异位词
学到了利用数组去实现哈希表,但前提是哈希值比较小,优先使用数组这种哈希结构
class Solution {
public boolean isAnagram(String s, String t) {
int[] hash = new int[26];//默认数组内的每个元素都是0
for(int i = 0;i<s.length();i++){
hash[s.charAt(i)-'a']++;
}
for(int j = 0 ;j<t.length();j++){
hash[t.charAt(j)-'a']--;
}
for(int k = 0;k<26;k++){
if(hash[k]!=0){
return false;
}
}
return true;
}
}
349. 两个数组的交集
还没有掌握java当中Set集合的东西,忘了,需要复习一下。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null||nums1.length==0||nums2==null||nums2.length==0){
return new int[0];
}
Set<Integer> set1 = new HashSet<>();
Set<Integer> resSet = new HashSet<>();
for(int i :nums1){
set1.add(i);
}
for (int i:nums2){
if(set1.contains(i)){
resSet.add(i);
}
}
// return resSet.stream().mapToInt(x -> x).toArray();
int [] arr = new int[resSet.size()];
int j = 0;
for(int i : resSet){
arr[j++] = i;
}
return arr;
}
}
202. 快乐数
一开始写错了,n/10写成n%10了。
class Solution {
public static int getSum(int n){
int sum = 0;
while(n!=0){
sum+=(n%10)*(n%10);
n/=10;/写错了
}
return sum;
}
public boolean isHappy(int n) {
Set<Integer> ss = new HashSet<>();
int sum = 0;
while(sum!=1){
sum = getSum(n);
if(ss.contains(sum)){
return false;
}else{
ss.add(sum);
}
n = sum;
}
return true;
}
}
1. 两数之和
还行,主要是注意要用map哈希结构。
复习一下Set集合。下面的链接。
- 为什么会想到用哈希表
- 哈希表为什么用map
- 本题map是用来存什么的
- map中的key和value用来存什么的
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] ans = new int[2];
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
int temp = target - nums[i];
if(map.containsKey(temp)){
ans[0] = i;
ans[1] = map.get(temp);
break;
}
map.put(nums[i],i);
}
return ans;
}
}