Java实现 LeetCode 480 滑动窗口中位数
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 滑动窗口中位数相关推荐
- LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)
1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...
- leetcode 480. 滑动窗口中位数(堆+滑动窗口)
中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2 ...
- [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
[问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...
- 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)
题目描述 因为自己写的复杂度已经到了 O(n),就没有再参考题解的优化了 更新:滑动窗口方法 思路 & 代码 用一个 int[ ] count 来存储当前判断子串的各字母出现次数 getCou ...
- [Swift]LeetCode480. 滑动窗口中位数 | Sliding Window Median
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Leetcode双指针滑动窗口相关题目
滑动窗口 滑动窗口解决哪种问题? 滑动窗口解决给定两个字符串S和T,问你S中是否存在一个子串,包含T中的所有字符并且不含有其他字符. 窗口右指针向右移动,窗口增大,直到满足条件,这时候找到可行解. 窗 ...
- LeetCode Hot100 ---- 滑动窗口专题
什么是滑动窗口? 其实就是一个队列,比如题中的 abcabcbb找出其中不含有重复字符的 最长子串 的长度,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满 ...
- LeetCode 239. 滑动窗口最大值(双端队列+单调栈)
文章目录 1. 题目信息 2. 解题 2.1 暴力法 2.2 双端队列法 1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内 ...
- LeetCode 239:滑动窗口最大值 思考分析
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 进阶: 你能在线性 ...
- leetcode 239. 滑动窗口最大值(单调队列)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例 1: 输 ...
最新文章
- 提高汽车系统的安全性
- Jest 只MOCK模块中的某个功能实现
- Serverless实战 —— 三分钟入坑指北 Docsify + Serverless Framework 快速创建个人博客系统
- Android 渗透测试学习手册 翻译完成!
- Vue编写动态组件实践(render函数的使用心得)
- 给Jquery easyui 的datagrid 每行添加操作链接
- linux看注册的定时任务,Linux下定时任务的查看及取消
- c语言及程序设计基础 pdf,《C语言程序设计基础》.pdf
- Maya批量随机替代插件BatchReplacerV1.0.2 下载及教程
- 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
- 【汇编语言】纯汇编语言编写打飞机小游戏
- 密码疑云 (3)——详解RSA的加密与解密
- Strong-Convexity:强凸性
- 平面设计中的插画设计技巧
- 【算法宇宙——在故事中学算法】背包dp之完全背包问题
- 在Chrome安装Edge的插件
- 将颜色值转为rgba值
- Matplotlib绘制三维数据点与线
- python之__slots__
- 祝愿大家在新的一年里,万事大吉,送上我设计的可爱暴富小老虎微信红包封面,祝愿大家新的一年财运旺,事业旺,健康旺。