这道题我读了好久才明白是什么意思,是因为忽略了这句话——k是排在这个人前面且身高大于或等于h的人数。看到了这句话才明白为什么demo的输出是那样的。
我觉得这个题的解题思路不是很容易想到,我是看了官方的图解才明白的,然后我自己顺了一下:
首先一定需要按照身高排序,从高到低,因为这样把一个矮的插入都高于他的时候,不会导致已经排好序的人的k值不正确。
然后就是怎么插入k的问题,我觉得解题里面很巧妙,就是把人插入第 k 个位置中,比如有两个人身高不同,但是K相同,那矮的人自然会插入高的人的前面;还有就是身高一样,K值不同,那我们需要先加入K值小的,然后才是大的,所以这里需要按照K的升序排列。
总结就是:身高 h 降序、个数 k 值升序,然后将某个学生插入队列的第 k 个位置中。我觉得很难想到。
学到的JAVA的知识:
我记得之前我就有纠结过类型转换,这道题让我看到了另一个方法,不错。
List<int[]> list = new ArrayList<>();
list.toArray(new int[people.length][]); 我理解转换的时候就是需要一个长度,java是数组的数组,所以我们长度给到外面的就行,里面的类型已经是数组了,这个是我的理解,欢迎纠错。
代码:
https://github.com/hanleirx/LeetCode/blob/master/406.%20%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97