这道题的方法是利用桶排序,思路是首先将数组用map进行频率的统计,然后定义一个长度为 数组长度加一 的list的数组 用频率作为下标来存放不同的频率出现的数字的list,最后从后向前遍历这个数组,当结果集的数字为k时,返回即可。
有几点学习的:
1 学到了一个map比较好用的函数,我之前都是分着写的,没有想到map里面有封装,map.getOrDefault(num,0)含义是key为num对应的value为空时返回0,很赞。
2 今天有点蒙的是突然不知道list的数组怎么定义了,List<Integer>[] list = new List[nums.length + 1];其实和int是一样的,后来反应过来了。
3 为了添加数组方便,用的list,但是结果需要返回int的数组,这个地方转换的时候,我还是查了一下的,本来想用这个方法:String[] strings = new String[list.size()]; list.toArray(strings);无奈一个是integer一个是int,不行。最后只好去遍历了。
4 这道题说了有唯一解,所以不需要取考虑k对应的频率里面有好处num,但是k不需要那么多值的情况。
代码:
https://github.com/hanleirx/LeetCode/blob/master/347.%20%E5%89%8D%20K%20%E4%B8%AA%E9%AB%98%E9%A2%91%E5%85%83%E7%B4%A0-%E6%A1%B6%E6%8E%92%E5%BA%8F
网友评论