1. 题目
2. 思路
(1) 堆排序
- 每次加入新元素,都对原列表进行堆排序。
- 要对列表进行从小到大的排序,需要构建大顶堆,然后不断将堆顶元素交换到后面即可。
3. 代码
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public List<Integer> list = new ArrayList<>();
public void Insert(Integer num) {
list.add(num);
for (int i = (list.size() >> 1) - 1; i >= 0; i--) {
adjust(i, list.size());
}
for (int i = list.size() - 1; i > 0; i--) {
swap(0, i);
adjust(0, i);
}
}
public Double GetMedian() {
int index = list.size() >> 1;
if ((list.size() & 1) == 0) {
return (list.get(index) + list.get(index - 1)) / 2.0;
} else {
return (double) list.get(index);
}
}
public void adjust(int i, int len) {
int temp = list.get(i);
for (int k = i * 2 + 1; k < len; k = k * 2 + 1) {
if (k + 1 < len && list.get(k + 1) < list.get(k)) {
k++;
}
if (temp > list.get(k)) {
list.set(i, list.get(k));
i = k;
} else {
break;
}
}
list.set(i, temp);
}
public void swap(int i, int j) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}