lintcode-81-数据流中位数】的更多相关文章

今天练习了一题: 数据流中位数 问题描述:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. 案例: 持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1, 1, 2, 2, 3] 持续进入数组的数的列表为:[4, 5, 1, 3, 2, 6, 0],则返回 [4, 4, 4, 3, 3, 3, 3] 持续进入数组的数的列表为:[2, 20, 100],则返回[2, 2, 20] 个人实现代码如下: main方法: public static voi…
[抄题]: 数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. [思维问题]: [一句话思路]: 左边x个元素,右边要有x+1个元素,因此利用maxheap把左边的最大值揪出来,利用minheap把右边的最小值揪出来 如果maxHeap.peek() > minHeap.peek(),就不断流动,直到顺滑. [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: [一刷]: 接口类是Queue<Integer&…
注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外一种是传递一个指向某个元素的iterator,这时候删除的就是这个对应的元素,无返回值. https://www.cnblogs.com/lakeone/p/5600494.html 删除的时候一定不能删除指针,只能删除迭代器 leetcode那个题就是在这个地方出错的: Input: [3,2,3…
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 数据 评测 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置. 注意事项 数…
------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 数据 评测 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置. 注意事项 数…
面试题3 -- 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1. 每行中的整数从左到右是排序的. 2. 每行的第一个数大于上一行的最后一个整数. public class Solution { /** * @param matrix, a list of lists of integers * @param target, an integer * @return a boolean, indicate whether matrix contains…
LintCode 81. Data Stream Median (Hard) 思路: 用一个大根堆保存较小的一半数, 一个小根堆保存较大的一半数. 每次根据num和两个堆顶的数据决定往哪个堆里面放. 放完后进行平衡确保两个堆的size差不超过1. 利用两个堆的size和堆顶值计算median. 大根堆可以表示为priority_queue<int, vector<int>, less<int>>, 其实priority_queue<int>默认就是大根堆.…
题目等级:Hard 题目描述:   There are two sorted arrays nums1 and nums2 of size m and n respectively.   Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).   You may assume nums1 and nums2 cannot be both empty.   E…
今天主要写了一下offer 1-41题,余下的稍后整理 1 """ 1 镜像二叉树: 递归 """ def mirror(root): if not root: return None mirror(root.left) mirror(root.right) root.left, root.right = root.right, root.left return root """2. 链表环入口 "&quo…
基本排序算法 冒泡排序 没什么可说的, 改进方法就是加一个标志位防止有序后重复遍历. 由于需要遍历两次, 所以时间复杂度O(N^2) 传送门 --> 冒泡排序 选择排序 外层从0开始默认outer是最小数的下标, 内存从outer+1位置开始遍历, 不稳定, 如{ 3, 3, 3, 2 }, 当比较最后一个4时, 是第一个3和2交换, 从而不稳定. 内外层遍历两次, 时间复杂度O(N^2) 传送门 --> 选择排序 插入排序 相当于打扑克排序, outer从1到N-1, inner从outer…