import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param heights int整型一维数组 * @param k int整型 * @return int整型 */ public int findMaxRangeWithinThreshold (int[] heights, int k) { // write code here int max_length = 1; int min_value = heights[0]; int max_value = heights[0]; int index = 0; for (int i = 1; i < heights.length; i++) { if(heights[i]>max_value){ max_value = heights[i]; }else if(min_value>heights[i]){ min_value = heights[i]; } while (max_value-min_value>k){ index++; int[] arr = Arrays.copyOfRange(heights,index,i+1); Arrays.sort(arr); max_value= arr[arr.length-1]; min_value = arr[0]; } max_length = Math.max(max_length,i-index+1); } return max_length; } }
本题考察的知识点是查找区间,所用编程语言是java。
首先我们需要明确题目的要求,然后才方便进行思考。题目的要求是寻找最长的区间满足最大值减去最小值小于等于k,
那么我们就比较好办了。首先默认最大值和最小值都等于数组的第一个元素,然后遍历数组剩下的元素:
如果当前遍历的数组元素值大于max_value,则更新max_value值
如果当前遍历的数组元素值小于min_value,则更新min_value值,判断max_value减去min_value的值是否小于等于k,如果是则
继续遍历下一个数组元素值,如果不是则将index+1和i位置的数组元素值进行排序,更新max_value和min_value,然后继续判断,直到max_value减去min_value的值小于等于k