哈希
1. 两数之和
import java.util.ArrayList;
class Solution {
public int[] twoSum(int[] nums, int target) {
//1.创建一个哈希表,用来存储已遍历的元素及其索引(key:元素的值-----value:元素的索引)
Map <Integer,Integer> hastable=new HashMap <Integer,Integer>();
//2.遍历数组中的每个元素
for(int i=0;i<nums.length;i++){
//计算当前元素需要的配对值
int aim=target-nums[i];
//判断该配对值是否已经在哈希表中出现过
if(hastable.containsKey(aim)){ // 如果存在,说明找到了两个数,它们的和为target
//返回配对值的下标和当前元素的下标
return new int[]{i,hastable.get(aim)};
}
//如果没有找到,记录当前元素的值及其索引
hastable.put(nums[i],i);
}
//3.如果遍历完数组没有找到符合条件的两个数,返回空数组
return new int[0];
}
}
49. 字母异位词分组
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map <String,List<String>> map =new HashMap <String,List<String>>();
for(String str:strs){
//1.将String类型的字符串转换成字符数组
char[] array=str.toCharArray();
//2.调用Arrays类提供的sort()方法,对字符型数组进行排序
Arrays.sort(array);
//3.将排序后的字符数组转换回String类型
String key=new String(array);
//4.声明一个list,用于存放map中与key对应的value(即所有字母异位词)
List<String> list = map.getOrDefault(key,new ArrayList<String>());
//5.将当前处理的字符串也加入list
list.add(str);
//6.向list插入一个新的键值对(如果key已经存在,则更新其对应的value)
map.put(key,list);
}
//将 map 中的所有值(即 List<String> 类型的集合)转换为一个 ArrayList 并返回
return new ArrayList <List<String>>(map.values());
}
}