1.1、题目1

剑指 Offer 40. 最小的k个数

1.2、解法

数组排序,然后循环赋值,这是基础题。

1.3、代码

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
        int []res = new int[k];
        Arrays.sort(arr);
        for(int i=0;i<k;i++){
            res[i]=arr[i];
        }
        return res;
    }
}

2.1、题目2

剑指 Offer 41. 数据流中的中位数

2.2、解法

这题不会做,有空再看看。

2.3、代码

class MedianFinder {
    Queue<Integer> A, B;
    public MedianFinder() {
        A = new PriorityQueue<>(); // 小顶堆,保存较大的一半
        B = new PriorityQueue<>((x, y) -> (y - x)); // 大顶堆,保存较小的一半
    }
    public void addNum(int num) {
        if(A.size() != B.size()) {
            A.add(num);
            B.add(A.poll());
        } else {
            B.add(num);
            A.add(B.poll());
        }
    }
    public double findMedian() {
        return A.size() != B.size() ? A.peek() : (A.peek() + B.peek()) / 2.0;
    }
}