resize() 方法可以为数组提前分配大小,但不分配内存。
当一个数在一堆数中出现的次数大于整体个数的一半时 可以用以下代码找出这个数
int moreThanHalfNum_Solution(vector<int>& nums) {
int cnt = 0, val = -1;
for (auto x : nums) {
if (!cnt) val = x, cnt = 1;
else {
if (x == val)cnt++;
else cnt--;
}
}
return val;
}
构建大根堆和小根堆的代码
priority_queue<int> max_heap; //大根堆
priority_queue<int, vector<int>, greater<int>>min_heap; //小根堆
动态的维护输入流的中间值
void insert(int num) {
max_heap.push(num);
if (min_heap.size() && max_heap.top() > min_heap.top()) {
auto maxv = max_heap.top(), minv = min_heap.top();
max_heap.pop(), min_heap.pop();
max_heap.push(minv), min_heap.push(maxv);
}
if (max_heap.size() > min_heap.size() + 1)
{
min_heap.push(max_heap.top());
max_heap.pop();
}
}
double getMedian() {
if (max_heap.size() + min_heap.size() & 1) return max_heap.top();
return (max_heap.top() + min_heap.top()) / 2.0;
}