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