SortArrayDistanceLessK

Algorithmic problem 专栏收录该内容
3 篇文章 0 订阅

[Question]

已知一个几乎有序的数组,几乎有序是指如果把数组排好序的话,每个元素移动的距离可以不超过K,并且K相对于数组来说比较小。

[Idea]

使用优先级队列结构 PriorityQueue length=K+1
首先将数组前"K+1"个数add进 PriorityQueue 
其次循环 add 数组下一个数 并 poll up 数组第一个数

[Source code]

import java.util.PriorityQueue;

public class code04_SortArrayDistanceLessK {

    public static void sortArrayDistanceLessK(int[] array, int k) {
        if (array == null || array.length < 2) {
            return;
        }
        PriorityQueue<Integer> heap = new PriorityQueue<>();
        int index = 0;
        for (; index < Math.min(array.length - 1, k); index++) {
            heap.add(array[index]);
        }
        int i = 0;
        for (; index < array.length; i++, index++) {
            heap.add(array[i]);
            array[i] = heap.poll();
        }
        while (!heap.isEmpty()) {
            array[i++] = heap.poll();
        }

    }
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值