力扣top100-49.字母异位词分组-小基数的元集合使用辅助数组降低时间复杂度


背景

最开始刷题的时候,总想着写一个大的辅助数组,用来对每一个元素进行计数,但是考虑到元素空间,肯定是不可行的
但是,对于一些有限个元的元素,比如short型,char型,Byte型,这些类型的元素空间都有限,因此就可以考虑使用一个辅助数组来计数

具体问题1:

在看sort源码时,以为底层就是使用的快排,但是实际上,会根据待排数组的元素类型,个数,整体情况选择不同的排序算法
比如,对于char short Byte类型的数组,且元素个数过多的情况,会使用计数排序
具体原理就是弄一个能包含所有元素空间的辅助数组然后遍历一遍待排数组,辅助数组做计数++操作
在遍历一遍辅助数组,0跳过,非0打印计数次

具体问题2:

链接:https://leetcode-cn.com/problems/group-anagrams
49. 字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]

方法1

字符串转数组,再排序,然后就能得到所有的同源词根,然后以这个根字符串作为key,同源异位词list作为value,存到hashmap里面
最后做返回输出

方法2

后面完全相同,但是排序使用了计数排序