哈希

哈希

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());
    }
}
posted @ 2025-12-25 17:24  juuddy  阅读(6)  评论(0)    收藏  举报