当前位置: 首页 > news >正文

宣武网站建设服务咨询类网站建设方案书

宣武网站建设服务,咨询类网站建设方案书,枣阳网站开发,泰顺机械网站建设题目描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数#xff0c;则没有中间值#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 Media…题目描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数则没有中间值中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 MedianFinder 对象。 void addNum(int num) 将数据流中的整数 num 添加到数据结构中。 double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。 示例 1 输入 [MedianFinder, addNum, addNum, findMedian, addNum, findMedian] [[], [1], [2], [], [3], []] 输出 [null, null, null, 1.5, null, 2.0]解释 MedianFinder medianFinder new MedianFinder(); medianFinder.addNum(1); // arr [1] medianFinder.addNum(2); // arr [1, 2] medianFinder.findMedian(); // 返回 1.5 ((1 2) / 2) medianFinder.addNum(3); // arr[1, 2, 3] medianFinder.findMedian(); // return 2.0 提示: -105  num 105在调用 findMedian 之前数据结构中至少有一个元素最多 5 * 104 次调用 addNum 和 findMedian 思路分析 一开始没看懂题目以为只要用List存储数据取中位数即可认真审题可以发现中位数是有序整数列表中的中间值所以必须对插入的数据先排序才能求中位值 在数据流中数据会不断涌入结构中那么也就面临着需要多次动态调整以获得中位数。 因此实现的数据结构需要既需要快速找到中位数也需要做到快速调整。 首先能想到就是二叉搜索树在平衡状态下树顶必定是中间数然后再根据长度的奇偶性决定是否取两个数。 此方法效率高但是手动编写较费时费力。 根据只需获得中间数的想法可以将数据分为左右两边一边以最大堆的形式实现可以快速获得左侧最大数 另一边则以最小堆的形式实现。其中需要注意的一点就是左右侧数据的长度差不能超过1。 这种实现方式的效率与AVL平衡二叉搜索树的效率相近但编写更快 显然为了可以在 O(1) 的复杂度内取得当前中位数我们应当令 l 为大根堆r 为小根堆并人为固定 l 和 r 之前存在如下的大小关系 当数据流元素数量为偶数l 和 r 大小相同此时动态中位数为两者堆顶元素的平均值当数据流元素数量为奇数l 比 r 多一此时动态中位数为 l 的堆顶原数。 为了满足上述说的奇偶性堆大小关系在进行 addNum 时我们应当分情况处理 插入前两者大小相同说明插入前数据流元素个数为偶数插入后变为奇数。我们期望操作完达到「l 的数量为 r 多一同时双堆维持有序」进一步分情况讨论 如果 r 为空说明当前插入的是首个元素直接添加到 l 即可如果 r 不为空且 num r.peek()说明 num 的插入位置不会在后半部分不会在 r 中直接加到 l 即可如果 r 不为空且 num r.peek()说明 num 的插入位置在后半部分此时将 r 的堆顶元素放到 l 中再把 num 放到 r相当于从 r 中置换一位出来放到 l 中。插入前两者大小不同说明前数据流元素个数为奇数插入后变为偶数。我们期望操作完达到「l 和 r 数量相等同时双堆维持有序」进一步分情况讨论此时 l 必然比 r 元素多一 如果 num l.peek()说明 num 的插入位置不会在前半部分不会在 l 中直接添加到 r 即可。如果 num l.peek()说明 num 的插入位置在前半部分此时将 l 的堆顶元素放到 r 中再把 num 放入 l 中相等于从 l 中替换一位出来当到 r 中。代码实现 class MedianFinder {//大顶堆PriorityQueueInteger l new PriorityQueue((a,b)-b-a);//小顶堆(默认)PriorityQueueInteger r new PriorityQueue((a,b)-a-b);public void addNum(int num) {int s1 l.size(), s2 r.size();if (s1 s2) {if (r.isEmpty() || num r.peek()) {l.add(num);} else {l.add(r.poll());r.add(num);}} else {if (l.peek() num) {r.add(num);} else {r.add(l.poll());l.add(num);}}}public double findMedian() {int s1 l.size(), s2 r.size();if (s1 s2) {return (l.peek() r.peek()) / 2.0;} else {return l.peek();}} }
http://www.hkea.cn/news/14588831/

相关文章:

  • 驾校门户网站模板做网站订金是多少钱
  • 柳州网站建设工作室wordpress插件手机
  • 新媒体营销心得体会seod的中文意思
  • 开网站需要钱吗淄川响应式网站建设
  • 黑白灰 网站wordpress要求
  • 深圳分销网站设计公司域名邮箱如何注册
  • 群晖的网站开发服装公司网站建设方案
  • 从事网站开发需要的证书宜春房产网
  • 网站建设中广告法绝对化用语整理电商网站设计公司力荐亿企邦
  • 乐清网站开发学校网站建设工作内容
  • 重庆多功能网站建设镇江网页设计培训
  • wordpress搭建的知名网站高端娱乐网站建设
  • 凉山州城乡规划建设局网站网络推广公司代理
  • 扬州西区网站建设网站建设 上海
  • 个人网站备案号被注销了网站首页设计代码
  • 红河州建设局网站网站做的图上传后字变得很模糊
  • 西安网站建设 早晨凡科网站备案
  • 携程网网站规划建设特点佛山新网站建设渠道
  • 响应式网站建设服务器做网站有哪些按钮
  • 长春企业自助建站如何找人做网站
  • 甘肃网站建设方案服务至上网站首页漂浮广告代码
  • 爱站云网站建设heikw常德网站建设的策划方案
  • 网站域名一年多少钱网站建设服务兴田德润
  • 建站网站那个好网站设计手机
  • 制作企业网站步骤申请域名后怎样做网站
  • 找人给公司做网站去哪找网站上的3d怎么做的
  • 网站建设公司电话创客贴网站建设
  • 重庆网站备案需要几天iis怎么使用来建设一个网站
  • 广州网站建设策划书网站架构设计师薪资水平
  • 网站建设公司基本流程ciid中国室内设计官网