480. 滑动窗口中位数

题目描述

中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。
例如:

[2,3,4],中位数是 3
[2,3],中位数是 (2 + 3) / 2 = 2.5
给你一个数组 nums,有一个大小为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。

分析

主要是维护一个有序的数组,每次移动的时候使用二分查找进行相应的删除和插入操作。

代码

class Solution {
public:
    int binarySearch(vector& arr, int target, int k){
		int l =0;
		int r =k;
		while(l medianSlidingWindow(vector& nums, int k) {
        //这个滑动窗口每次去除一个元素并且新增加一个元素
		//先对前k个元素进行排序
		vector res;
		//申请一个k+1长的数组,之后就一直进行维持这个k大小的有序数组
		vector arr(k+1, INT_MAX);
		for(int i=0;i=index2;j--){
				arr[j+1]=arr[j];
			}
			arr[index2] = nums[i+k];
			if(k%2==1){
			res.push_back(arr[k/2]);
			}else{
				res.push_back(arr[k/2-1]/2.0 + arr[k/2]/2.0);
			}
		}
		return res;
    }
};

你可能感兴趣的:(leetcode题解)