Authored by Tony Feng
Created on April 28th, 2022
Last Modified on April 28th, 2022
Task 1 - Q40. 最小的k个数
Question
输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
Solution 1
|
|
Solution 2
|
|
Explanation
- Solution 1
- Time Complexity: O(N * log(N)), i.e., quick sort
- Space Complexity: O(N), i.e., the worst case is the input array is in descending order.
- Solution 2
- Time Complexity: O(N), i.e., Every time only one side will be processed, N + N/2 + N/4 + N/8 + …
- Space Complexity: O(log(N)), i.e., Average recursion depth is log(N).
Task 2 - Q41. 数据流中的中位数
Question
如何得到一个数据流中的中位数?设计一个支持以下两种操作的数据结构:
void addNum(int num)
: 从数据流中添加一个整数到数据结构中。double findMedian()
: 返回目前所有元素的中位数。
Solution
|
|
Explanation
- heapq pops only smallest number, so number should be inversed before stored into
self.small
. - Time Complexity
findMedian
: O(1)addNum
: O(log(N))
- Space Complexity: O(N)