第一种方法,用优先级队列构造出最大堆,然后不断更新最大堆,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。但是这里利用集合并不好,手写最大堆会比这个更优,因为在超过k个数的时候,优先级队列需要poll和offer(或者add)操作,poll会下沉恢复堆有序(源码思路:将数组最后一个元素赋给堆顶,size-1,然后从堆...
第一种方法,用优先级队列构造出最大堆,然后不断更新最大堆,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。但是这里利用集合并不好,手写最大堆会比这个更优,因为在超过k个数的时候,优先级队列需要poll和offer(或者add)操作,poll会下沉恢复堆有序(源码思路:将数组最后一个元素赋给堆顶,size-1,然后从堆...
但是这里利用集合并不好,手写最大堆会比这个更优,因为在超过k个数的时候,优先级队列需要poll和offer(或者add)操作,poll会下沉恢复堆有序(源码思路:将数组最后一个元素赋给堆顶,size-1,然后从堆顶往下一个个比较,相当于把堆顶往下沉,然后到合适位置,堆顶下沉只会赋值一次,并不是下沉的时候比较交换),offer会上...
但是这里利用集合并不好,手写最大堆会比这个更优,因为在超过k个数的时候,优先级队列需要poll和offer(或者add)操作,poll会下沉恢复堆有序(源码思路:将数组最后一个元素赋给堆顶,size-1,然后从堆顶往下一个个比较,相当于把堆顶往下沉,然后到合适位置,堆顶下沉只会赋值一次,并不是下沉的时候比较交换),offer会上...