滑动窗口的最大值
来源:互联网 发布:nginx动静分离配置 编辑:程序博客网 时间:2024/06/05 06:15
Description:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
import java.util.ArrayList;public class Solution { public ArrayList<Integer> maxInWindows(int [] a, int size) { ArrayList<Integer> list = new ArrayList<>(); int n = a.length; if (n < size || size == 0) return list; int start = 0; int max = 0; int end = size - 1; while (end < n) { list.add(maxNum(a, start, end)); start++; end++; } for (int aa : list) { System.out.print(aa + " "); } return list; } public int maxNum(int[] a, int start, int end) { int max = 0; for (int i = start; i <= end; i++) { if (max < a[i]) max = a[i]; } return max; }}
方法二:
import java.util.ArrayList;import java.util.LinkedList;public class Solution { public ArrayList<Integer> maxInWindows(int [] a, int size) { ArrayList<Integer> list = new ArrayList<>(); int n = a.length; if (n < size || size == 0) return list; LinkedList<Integer> linkedList = new LinkedList<>(); for (int i = 0; i < n; i++) { //存取的是下标 while (!linkedList.isEmpty() && a[linkedList.peekLast()] < a[i]) //从后往前遍历,比当前元素小的直接弹出 linkedList.pollLast(); while (!linkedList.isEmpty() && i - linkedList.peekFirst() + 1 > size) //判断元素个数是否小于size,如果大于就把队首元素弹出 linkedList.pollFirst(); linkedList.offer(i); //存下标 if (!linkedList.isEmpty() && i + 1 >= size) list.add(a[linkedList.peekFirst()]); } return list; }}
阅读全文
0 0
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 初心不改,始终如一
- 有哪些好习惯可以坚持
- 挑战程序竞赛系列(84):3.6极限情况(1)
- 构造方法的重载
- 360Lib:CPP-PSNR
- 滑动窗口的最大值
- 494. Target Sum
- Esper中使用枚举类型作为过滤条件的语法
- Xamarin 卫星菜单(Satellite Menu)组件使用案例!目前只兼容Android、iOS(二)
- sentry
- 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException
- vue如何应用md5.js和base64.js
- Spring 源码解析之DispatcherServlet源码解析(五)
- pinyin4j学习----入门