LeetCode 热题 100(一):哈希。49. 字母异位词分组、128. 最长连续序列。

LeetCode100链接:LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

一、49. 字母异位词分组

题目要求:

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

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

LeetCode 热题 100(一):哈希。49. 字母异位词分组、128. 最长连续序列。_第1张图片

思路:采用map和List类型进行解决,具体过程见代码。

代码:

class Solution {
    public List> groupAnagrams(String[] strs) {
        // HashMap和ArrayList应用题,排序+哈希表
        // map<单词排序后的key, 同一key的的单词集合>,遍历一次strs即可,
        // 不过每个单词仍不可避免要遍历每个字符,  O(n*maxlen*logmaxlen)
        Map> map = new HashMap>();
        for(String str : strs){
            // 将每个单词转化为字符数组,排序后得到该单词的key
            char[] chr = str.toCharArray();
            Arrays.sort(chr);
            String key = new String(chr);
             // 从map中获取指定键的值,并将其存储在一个字符串类型的列表中,
             // 就是说只要存在当前key,则会返回对应key的value,也就是字符串列表
            //  若没有当前单词的key则创建空list
            List list = map.getOrDefault(key, new ArrayList());
            // 将当前单词加入list,并将key和更新后的list压入map
            list.add(str);
            map.put(key, list);
        }
        // 遍历完成后,map中已经存储了所有单词,获取map中所有value的list集合(相当于按key分好list组),构建List
        return new ArrayList>(map.values());
    }
}

二、128. 最长连续序列

 题目要求:

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请设计并实现时间复杂度为 O(n) 的算法解决此问题。

LeetCode 热题 100(一):哈希。49. 字母异位词分组、128. 最长连续序列。_第2张图片

 思路:因考虑时间复杂度为O(n),所有使用哈希算法中的结构,该题我这里使用set

代码:

class Solution {
    public int longestConsecutive(int[] nums) {

        Set set = new HashSet<>();
        // 建立set存储,同时去重
        for (int num : nums) {
            set.add(num);
        }
        // 最终结果ans
        int ans = 0;
        // 遍历set
        for (int num : set) {
            int cur = num;
            // 只有当num-1不存在时,才开始向后遍历num+1,num+2;
            // 目的就是找到序列的初始位置
            if (!set.contains(cur - 1)){
                //查看数组中是否有 cur+1 ,有的话就继续查找 cur +1 +1
                while (set.contains(cur + 1))
                    cur++;
            }
            // [num, cur]之间是连续的,数字有cur - num + 1个
            ans = Math.max(ans, cur - num + 1);
        }
        return ans;
    }
}

你可能感兴趣的:(力扣刷题,leetcode,哈希算法,算法)