480. 滑动窗口中位数

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

例如:

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

示例:

给出 nums = [1,3,-1,-3,5,3,6,7],以及 k = 3。

窗口位置 中位数


[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
因此,返回该滑动窗口的中位数数组 [1,-1,-1,3,5,6]。

提示:

你可以假设 k 始终有效,即:k 始终小于输入的非空数组的元素个数。
与真实值误差在 10 ^ -5 以内的答案将被视作正确答案。
PS:
其实也就是排序,只不过我以后的排序都是二分排序,我的排序数组就是k大小

class Solution {public double[] medianSlidingWindow(int[] nums, int k) {int len = nums.length - k + 1;double[] res = new double[len];int[] arr = Arrays.copyOfRange(nums, 0, k);Arrays.sort(arr);for (int i = 0; i < len; i++) {if (k % 2 == 0) {res[i] = (0.00 + arr[k/2] + arr[k/2-1]) / 2;} else {res[i] = arr[k/2];}if (i == len - 1) break;update(arr, nums[i], nums[i + k]);}return res;}void update(int[] arr, int rm, int add) {if (rm == add) return;int idx = Arrays.binarySearch(arr, rm);int i = 0;if (add > rm) {for (i = idx; i < arr.length - 1; i++) {if (arr[i+1] >= add) break;arr[i] = arr[i+1];}} else {for (i = idx; i > 0; i--) {if (arr[i - 1] <= add) break;arr[i] = arr[i-1];}}arr[i] = add;}
}

Java实现 LeetCode 480 滑动窗口中位数相关推荐

  1. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  2. leetcode 480. 滑动窗口中位数(堆+滑动窗口)

    中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2 ...

  3. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]

    [问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...

  4. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)

    题目描述 因为自己写的复杂度已经到了 O(n),就没有再参考题解的优化了 更新:滑动窗口方法 思路 & 代码 用一个 int[ ] count 来存储当前判断子串的各字母出现次数 getCou ...

  5. [Swift]LeetCode480. 滑动窗口中位数 | Sliding Window Median

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. Leetcode双指针滑动窗口相关题目

    滑动窗口 滑动窗口解决哪种问题? 滑动窗口解决给定两个字符串S和T,问你S中是否存在一个子串,包含T中的所有字符并且不含有其他字符. 窗口右指针向右移动,窗口增大,直到满足条件,这时候找到可行解. 窗 ...

  7. LeetCode Hot100 ---- 滑动窗口专题

    什么是滑动窗口? 其实就是一个队列,比如题中的 abcabcbb找出其中不含有重复字符的 最长子串 的长度,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满 ...

  8. LeetCode 239. 滑动窗口最大值(双端队列+单调栈)

    文章目录 1. 题目信息 2. 解题 2.1 暴力法 2.2 双端队列法 1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内 ...

  9. LeetCode 239:滑动窗口最大值 思考分析

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 进阶: 你能在线性 ...

  10. leetcode 239. 滑动窗口最大值(单调队列)

    给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例 1: 输 ...

最新文章

  1. 提高汽车系统的安全性
  2. Jest 只MOCK模块中的某个功能实现
  3. Serverless实战 —— 三分钟入坑指北 Docsify + Serverless Framework 快速创建个人博客系统
  4. Android 渗透测试学习手册 翻译完成!
  5. Vue编写动态组件实践(render函数的使用心得)
  6. 给Jquery easyui 的datagrid 每行添加操作链接
  7. linux看注册的定时任务,Linux下定时任务的查看及取消
  8. c语言及程序设计基础 pdf,《C语言程序设计基础》.pdf
  9. Maya批量随机替代插件BatchReplacerV1.0.2 下载及教程
  10. 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
  11. 【汇编语言】纯汇编语言编写打飞机小游戏
  12. 密码疑云 (3)——详解RSA的加密与解密
  13. Strong-Convexity:强凸性
  14. 平面设计中的插画设计技巧
  15. 【算法宇宙——在故事中学算法】背包dp之完全背包问题
  16. 在Chrome安装Edge的插件
  17. 将颜色值转为rgba值
  18. Matplotlib绘制三维数据点与线
  19. python之__slots__
  20. 祝愿大家在新的一年里,万事大吉,送上我设计的可爱暴富小老虎微信红包封面,祝愿大家新的一年财运旺,事业旺,健康旺。

热门文章

  1. 程序员如何成为架构师
  2. java实现pdf旋转_基于Java实现PDF文本旋转倾斜
  3. APP如何上架App Store?
  4. 怎样用计算机算一条线的斜率,直线的斜率
  5. 如何用python打开qq_如何用python登录qq
  6. 统计相关国际期刊汇总
  7. DhtmlGantt案例-弹窗lightbox自定义字段
  8. 7-27 冒泡法排序 (20分) Kotlin
  9. 不踩雷不将就 京东智能产品30天无忧退
  10. lbj学习日记 05 一维数组和二维数组