LINTCODE——数据流中位数
思路:每加入一个新的数,用二分法找到其在数组中的位置,方法O(1)的存储,O(nlogn)的时间
class Solution {
public:
/*
* @param nums: A list of integers
* @return: the median of numbers
*/
vector<int> medianII(vector<int> &nums) {
// write your code here
vector<int> res;
for(int n = 0 ; n < nums.size() ; n++)
{
int L = 0 , R = n-1;
while(L < R)
{
int mid = (L+R)>>1;
if(nums[n] < nums[mid])
R = mid;
else if(nums[n] > nums[mid])
L = mid+1;
else
{
L = mid;
R = mid;
break;
}
}
if(nums[n] > nums[L])
{
nums.insert(nums.begin()+L+1,nums[n]);
}
else
{
nums.insert(nums.begin()+L,nums[n]);
}
nums.erase(nums.begin()+n+1);
res.push_back(nums[n/2]);
}
return res;
}