题解 | #寻找最合适的生育区域#
寻找最合适的生育区域
https://www.nowcoder.com/practice/c183c254a5c94b9da341fb27fb3caf99
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