哈希
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
class Solution{
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++)
{
if(map.containsKey(target-nums[i]))
{
return new int[]{map.get(target-nums[i]),i};
}
map.put(nums[i],i);//将数组中的数据放入map中
}
return new int[0];
}
}
字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
思路
-
首先创建一个map<String,List>类型的映射对象map,用于存储单词异位分组;
-
遍历输入的字符串strs;
-
对于每一个字符串str转化为字符串数组array,然后将字符串数组进行排序,得到排序后的key
-
检查映射map中是否存在键为key的键值对,若不存在,创建新的列表,将key和新列表添加到map中;若存在,获取对应的列表,并将当前字符串str添加到列表中。
-
遍历结束后,返回map中的所有列表,即分组后的字母异位词列表。
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map = new HashMap<String,List<String>>();
for(String str:strs){
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String (array);
List<String,List<String>> list = map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}