⚡每日算法&面试题⚡一起肥学1️⃣0️⃣( 含 HashMap& TreeMap)

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡每日算法&面试题⚡一起肥学1️⃣0️⃣( 含 HashMap& TreeMap)相关的知识,希望对你有一定的参考价值。

看前必知

每日算法和面试题系列出了有一段时间了,收到了不少肥友的支持。想要换工作或者找工作的肥友要多来光顾了计算机领域的技能在不断的更新,你不学习就等于倒退。再不济的话多知道点东西和同事朋友一起吹嘘也能用上啊!哈哈哈。

🌟算法题

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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:

输入: strs = [""]
输出: [[""]]
示例 3:

输入: strs = ["a"]
输出: [["a"]]
 
提示:

1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

🌟一点点思路

我发现有时候不是题不会做,是题的意思我理解不了这道题你要是看懂字母异位词是什么其实也不难嘛。这道题的主要意思就是把含有相同字母的单词放在一个数组里面。这些懂了吧,判断是不是同一组的单词也是挺简单的比如:["eat", "tea", "tan", "ate", "nat", "bat"]可以把字母从小到大排序例如第一个为aet后面再找这个字母组合的单词就可以了。下面我们使用散列表解题。

🌟源码和详解

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
    //构建hashmap
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] array = str.toCharArray();
            //将strs的单词排序
            Arrays.sort(array);
            //构造这种单词序列的key比如刚才的aet,后面若是出现这种情况就把他们归为一组
            String key = new String(array);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

🌟面试题

问:如何决定使用 HashMap 还是 TreeMap?

介绍
TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。

HashMap<K,V>的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。

结论
如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。

HashMap 和 TreeMap 的实现

HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。

HashMap(): 构建一个空的哈希映像

HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射

HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像

HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像

TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。

TreeMap():构建一个空的映像树

TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素

TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序

TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序

特别介绍

📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个面试和考研的算法练习我们一起加油上岸之路

资料领取

以上是关于⚡每日算法&面试题⚡一起肥学1️⃣0️⃣( 含 HashMap& TreeMap)的主要内容,如果未能解决你的问题,请参考以下文章

⚡每日算法&面试题⚡一起肥学1️⃣1️⃣(面试linux命令)

⚡每日算法&面试题⚡一起肥学6️⃣

⚡每日算法&面试题⚡一起肥学5️⃣

⚡每日算法&面试题⚡一起肥学7️⃣

⚡每日算法&面试题⚡一起肥学4️⃣

⚡每日算法&面试题⚡一起肥学8️⃣