leetcode热门100

37 阅读1分钟

哈希

两数之和

给定一个整数数组 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];
}
}

字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

思路

  1. 首先创建一个map<String,List>类型的映射对象map,用于存储单词异位分组;

  2. 遍历输入的字符串strs;

  3. 对于每一个字符串str转化为字符串数组array,然后将字符串数组进行排序,得到排序后的key

  4. 检查映射map中是否存在键为key的键值对,若不存在,创建新的列表,将key和新列表添加到map中;若存在,获取对应的列表,并将当前字符串str添加到列表中。

  5. 遍历结束后,返回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());
    }