import java.util.PriorityQueue; //o(n*logk) public class Test3 { public void sortedArrDistanceLessK(int[] arr ,int k){ //小根堆 PriorityQueue<Integer> heap = new PriorityQueue<>(); int index = 0; for (; index <= Math.min(arr.length -1 , k) ; index++) { heap.add(arr[index]); } int i = 0; for( ; index < arr.length ; i++ , index++){ heap.add(arr[index]); arr[i] =heap.poll(); } while (!heap.isEmpty()){ arr[i++] = heap.poll(); } } }
定义一个数组,此数组在排序过程每个元素的移动距离不超过k,实现时间复杂度小于o(n*logn)的算法
于 2024-07-15 15:56:04 首次发布