每日一题 滑动窗口

tech2022-08-18  77

每日一题 滑动窗口

题目要求:给定一个数组和窗口大小,窗口从左向右依次滑动,判断窗口中最大的值是多少,返回一个数组 例如:给定数组{4,6,6,5,3} ,窗口大小2, 返回 {4,6,6,6,6}

/** * 暴力破解 * @author 郑涛 */ public int[] windosMax(int[] arr, int size) { if(arr.length < 0 || size < 0) { //数组小于0或者窗口大小小于0 return null; } if(arr.length == 1 || size == 1) { //如果数组大小等于1 或者 窗口大小等于1 return arr; } int[] res = new int[arr.length]; //保存结果 res[0] = arr[0]; int temp = arr[0]; //用来保存除窗口最后一个位置外的最大值,及下标,初始值为原数组第一个元素 for (int i = 1; i < arr.length; i++) { //遍历整个数组 temp = findMax(arr, i - size + 1, i); if(arr[i] > temp) { temp = arr[i]; } res[i] = temp; } return res; } private int findMax(int[] arr, int i, int i2) { // TODO Auto-generated method stub if(i < 0 ) { i = 0; } int max = arr[i]; for (int j = i; j <= i2; j++) { if(max < arr[j]) { max = arr[j]; } } return max; }

题目来源:某面试题,与LeetCode 239题相似

最新回复(0)