242.有效的字母异位词
这道题主要是引入一下hashmap,主要就是两个字符串判断其26个字母存储到哈希表后最后个数是否相同
class Solution {
public boolean isAnagram(String s, String t) {
int [] record=new int [26];
for (int i=0;i<s.length();i++){
record[s.charAt(i)-'a']++;
}
for (int i=0;i<t.length();i++){
record[t.charAt(i)-'a']--;
}
for(int count: record){
if(count!=0){
return false;
}
}
return true;
}
}
349. 两个数组的交集
主要是什么时候用set 什么时候用数组做hash,数组是用下标做key所以最好数字药效,set是去重时用。然后就是HashSet Set的S是大写 然后有add contains方法
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null || nums1.length==0 || nums2==null || nums2.length==0){
return null;
}
// Set<Integer> set1 = new HashSet<>();
Set<Integer> set1 = new HashSet<>();
Set<Integer> reset = new HashSet<>();//最终输出的
for(int i:nums1){
set1.add(i);
}
for(int i:nums2){
if(set1.contains(i)){
reset.add(i);
}
}
int []arr=new int[reset.size()];
int j=0;
for(int i:reset){
arr[j++]=i;
}
return arr;
}
}
第202题. 快乐数
主要是判断sum有没有出现过,这样就可以判断有没有出现死循环!!!
class Solution {
public boolean isHappy(int n) {
Set <Integer> record =new HashSet<>();
while(n!=1 && !record.contains(n)){
record.add(n);
n=get_sum(n);
}
return n==1;
}
private int get_sum(int n){
int sum=0;
while(n > 0){
int temp = n % 10;
sum += temp * temp;
n = n / 10;
}
return sum;
}
}
1. 两数之和
主要是学到什么时候用map,然后这题key是数组元素 value是下标!!!需要两个值存储就用map
class Solution {
public int[] twoSum(int[] nums, int target) {
int [] res=new int [2];
if(nums==null || nums.length==0){
return res;
}
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
res[0]=map.get(target-nums[i]);
res[1]=i;
break;
}
map.put(nums[i], i);
}
return res;
}
}
首先我再强调一下 什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。
本题呢,我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。
那么我们就应该想到使用哈希法了。
因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
再来看一下使用数组和set来做哈希法的局限。
- 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
- set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。
此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value再保存数值所在的下标。