480. Sliding Window Median
来源:互联网 发布:电子技术仿真软件 编辑:程序博客网 时间:2024/05/17 19:20
Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value.
Examples:[2,3,4]
, the median is 3
[2,3]
, the median is (2 + 3) / 2 = 2.5
Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position. Your job is to output the median array for each window in the original array.
For example,
Given nums = [1,3,-1,-3,5,3,6,7]
, and k = 3.
Window position Median--------------- -----[1 3 -1] -3 5 3 6 7 1 1 [3 -1 -3] 5 3 6 7 -1 1 3 [-1 -3 5] 3 6 7 -1 1 3 -1 [-3 5 3] 6 7 3 1 3 -1 -3 [5 3 6] 7 5 1 3 -1 -3 5 [3 6 7] 6
Therefore, return the median sliding window as [1,-1,-1,3,5,6]
.
Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.
public class Solution { class Node implements Comparable<Node>{ int val, id; public Node(int _val, int _id) { this.val = _val; this.id = _id; } public int compareTo(Node other) { Node a = (Node) other; if (this.val == a.val) { return this.id - a.id; } else if (this.val > a.val) { return 1; } else { return -1; } } } public void add(TreeSet<Node> minHeap, TreeSet<Node> maxHeap, Node node) { maxHeap.add(node); Node min = maxHeap.first(); minHeap.add(min); maxHeap.remove(min); while (minHeap.size() > maxHeap.size() + 1) { Node max = minHeap.last(); maxHeap.add(max); minHeap.remove(max); } } public void remove(TreeSet<Node> minHeap, TreeSet<Node> maxHeap, Node node) { if (minHeap.contains(node)) { minHeap.remove(node); } else { maxHeap.remove(node); } } public double[] medianSlidingWindow(int[] nums, int k) { TreeSet<Node> minHeap = new TreeSet<Node>(); TreeSet<Node> maxHeap = new TreeSet<Node>(); double[] res = new double[nums.length - k + 1]; int index = 0; for (int i = 0; i < k - 1; i ++) { add(minHeap, maxHeap, new Node(nums[i], i)); //System.out.print(minHeap.size() + " "); //System.out.println(maxHeap.size()); } for (int i = k - 1; i < nums.length; i ++) { add(minHeap, maxHeap, new Node(nums[i], i)); res[index ++] = minHeap.size() == maxHeap.size()? ((long)maxHeap.first().val + (long)minHeap.last().val) / 2.0: minHeap.last().val; remove(minHeap, maxHeap, new Node(nums[i - k + 1], i - k + 1)); //System.out.print(minHeap.size() + " "); //System.out.println(maxHeap.size()); } return res; }}
- 480. Sliding Window Median
- 480. Sliding Window Median
- 480. Sliding Window Median
- LeetCode 480. Sliding Window Median
- [LeetCode]480. Sliding Window Median
- [leetcode]480. Sliding Window Median
- leetcode 480. Sliding Window Median
- [Leetcode] 480. Sliding Window Median 解题报告
- [LeetCode] Sliding Window Median
- Lintcode 360 Sliding Window Median
- LintCode:H-Sliding Window Median
- leetcode-480-Sliding Window Median
- leetcode 480. Sliding Window Median 滑动窗口中位数
- [LeetCode] Sliding Window Median 滑动窗口中位数
- Leetcode 480. Sliding Window Median 滑动窗口中的中位数 解题报告
- Sliding Window
- Sliding Window
- sliding window
- 用ThinkPHP框架写程序还原或搬家
- strcpy的使用需要注意dest的长度
- 推荐算法之 slope one 算法
- jxbrowser 监听所有网络请求 jxbrowser 系列教程2
- Ubuntu 14.04安装和使用python3.5
- 480. Sliding Window Median
- spark入门(4)----scala扫盲(1)
- Input实现下拉框多选
- python 版本切换脚本(切记根据自己的需求更改,出错自己负责)
- sql server如何对表进行查看锁和解锁
- SIGABRT的可能原因
- 颜色格式转换: 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- Java基础面试题
- Mac OS X系统下adb调试Android手机的方法