剑指offer 64-数据流中的中位数
来源:互联网 发布:淘宝会自动确认收货吗 编辑:程序博客网 时间:2024/04/30 06:36
1.使用algorithm,最大堆最小堆 vector
左边最大堆,右边最小堆,
#include<iostream>#include<vector>#include<algorithm>using namespace std;template<typename T> class DynamicArray{public:void Insert(T num){if(((max.size()+min.size())&1)==0) {if(max.size()>0 && num<max[0]){max.push_back(num);push_heap(max.begin(),max.end(),less<T>());num = max[0];pop_heap(max.begin(),max.end(),less<T>());max.pop_back();}min.push_back(num);push_heap(min.begin(),min.end(),greater<T>());}else{if(min.size()>0 && min[0]<num){min.push_back(num);push_heap(min.begin(),min.end(),greater<T>());num = min[0];pop_heap(min.begin(),min.end(),greater<T>());min.pop_back();}max.push_back(num);push_heap(max.begin(),max.end(),less<T>());}}T GetMedian(){int size = max.size()+min.size();if(size == 0)throw exception("no numbers are available");if((size&1)==1)return min[0];elsereturn (min[0]+max[0])/2;}private:vector<T> max;vector<T> min;};void Test(char* testName, DynamicArray<double>& numbers, double expected){ if(testName != NULL) printf("%s begins: ", testName); if(abs(numbers.GetMedian() - expected) < 0.0000001) printf("Passed.\n"); else printf("FAILED.\n");}int main(int argc, char* argv[]){ DynamicArray<double> numbers; printf("Test1 begins: "); try { numbers.GetMedian(); printf("FAILED.\n"); } catch(exception e) { printf("Passed.\n"); } numbers.Insert(5) ; Test("Test2", numbers, 5); //5 numbers.Insert(2); Test("Test3", numbers, 3.5); //2 5 numbers.Insert(3); Test("Test4", numbers, 3); //2 3 5 numbers.Insert(4); Test("Test6", numbers, 3.5);//2 3 4 5 numbers.Insert(1); Test("Test5", numbers, 3); //1 2 3 4 5 numbers.Insert(6); Test("Test7", numbers, 3.5);//1 2 3 4 5 6 numbers.Insert(7); Test("Test8", numbers, 4); // 1 2 3 4 4 5 6 numbers.Insert(0); Test("Test9", numbers, 3.5);// 0 1 2 3 4 4 5 6 numbers.Insert(8); Test("Test10", numbers, 4);// 0 1 2 3 4 4 5 6 8return 0;}
0 0
- 剑指offer 64-数据流中的中位数
- 《剑指offer》:[64]数据流中的中位数
- 【剑指offer】题64:数据流中的中位数
- 剑指offer--数据流中的中位数
- 《剑指offer》数据流中的中位数
- 剑指offer:数据流中的中位数
- 剑指offer-数据流中的中位数
- 剑指offer 数据流中的中位数
- 《剑指offer》数据流中的中位数
- 剑指Offer:数据流中的中位数
- 剑指offer-数据流中的中位数
- 剑指offer 数据流中的中位数
- 《剑指Offer》学习笔记--面试题64:数据流中的中位数
- 【剑指Offer学习】【面试题64:数据流中的中位数】
- 剑指offer-面试题64:数据流中的中位数
- 《剑指offer》面试题64 数据流中的中位数
- 剑指offer--面试题64:数据流中的中位数
- 剑指offer-面试题64-数据流中的中位数
- MVC发布网站的各种权限问题及解决设置
- 记一次TcpListenOverflows报警解决过程
- google picasa 网络相册帮助
- iOS block的用法
- eclipse运行jsp程序错误---SEVERE: StandardServer.await: create[localhost:8005]
- 剑指offer 64-数据流中的中位数
- 如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化
- 从运行原理及使用场景看Apache和Nginx
- Android 通过WebService进行网络编程,使用工具类轻松实现
- STM32关于uversion版本更换和MCU型号更换编译出错的解决办法、记录。
- 设计模式之访问者模式
- Hibernate get和load区别
- 在Axis1中使用HTTP长连接
- android 自定义自定义圆角dialog,消除黑色window背景