生成窗口最大值数组
来源:互联网 发布:天猫淘宝京东的区别ppt 编辑:程序博客网 时间:2024/06/09 14:52
有一个整型数组arr和一个大小为w的窗口从数组的左边移动到右边,窗口每次向右边移动一个位置。
例如:整型数组arr为4, 3, 5, 4, 3, 3, 6, 7,窗口大小为3,返回结果为5,5,5,4,6,7
import java.util.LinkedList;public class GetMaxWindow {public static void main(String[] args) {int[] a = { 4, 3, 5, 4, 3, 3, 6, 7 };int[] solution = solution(a, 3);System.out.print("最大值数组为:");for (int i = 0; i < solution.length; i++) {System.out.print(solution[i] + " ");}}public static int[] solution(int[] arr, int w) {if (arr == null || w < 1 || arr.length < w) {return null;}LinkedListqMax = new LinkedList ();// 定义一个双端队列,保持的时数组下标int[] res = new int[arr.length - w + 1];// 最大值数组元素的个数int index = 0;for (int i = 0; i < arr.length; i++) {int cur = arr[i];while (!qMax.isEmpty() && arr[qMax.peekLast()] <= cur) {// 当双端队列不空,并且当前元素大于等于队列的尾的元素时qMax.pollLast();// 把队列尾部元素弹出}qMax.addLast(i);// 把当前数组下标存到队列中if (qMax.peekFirst() == i - w) {// 当队首的元素下标为i-w时,过期qMax.pollFirst();// 将队首元素弹出}if (i >= w - 1) {// 如i=3,w=3,此时窗口下标应为[1,2,3],index为0,故此时index加1,即窗口右移res[index++] = arr[qMax.peekFirst()];// 当前窗口的最大值,即窗口右移一位后的首部}}return res;}}
阅读全文
0 0
- 生成窗口最大值数组
- 生成窗口最大值数组
- 生成窗口最大值数组
- 生成窗口最大值数组
- 生成窗口最大值数组
- 生成窗口最大值数组
- 数据结构 生成窗口最大值数组
- 算法:生成窗口最大值数组
- 生成窗口最大值数组 + 双端队列
- 在线编程--生成窗口最大值数组
- 1_7生成窗口最大值数组
- 栈和队列---生成窗口最大值数组
- 栈和队列之生成窗口最大值数组
- 栈和队列(7)-- 生成窗口最大值数组
- 栈和队列——生成窗口最大值数组
- 窗口最大值数组
- 找出滑动窗口数组中的最大值
- 获取窗口最大值数组 O(n)解法
- 软编码Flv 到Mp4 容器(四) fmp4 总览和基础讲解
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- android Activity生命周期总结
- Unity Mecanim动画的实现(八):Animation视图
- ButterKnife初体验与认知JakeWharton
- 生成窗口最大值数组
- Keil uVision4教程
- 使用Phpstorm实现远程开发
- 如何解决VMwave-tools 安装过程报错:“正在简易安装时,无法手动启动VMware tools安装!”
- 导入dmp文件
- Log4j 2使用教程二 【详解】
- 23种设计模式全解析
- 在datagrid中的toolbar添加输入框
- 简单线性表的java实现