题解 | #寻找最合适的生育区域# java

寻找最合适的生育区域

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 res = 0;
        List<Integer> S = new ArrayList<>();

        for (int i = 0, j = 0; i < heights.length; i++) {
            S.add(heights[i]); // 将当前地区的高度加入
            
            Collections.sort(S);
            // 当最大高度和最小高度的差大于 k 时,移除最左侧的元素,缩小范围
            while (!S.isEmpty() && S.get(S.size()-1) - S.get(0) > k) {
                S.remove((Integer) heights[j]); //必须用Integer转,否则remove就根据index删除了
                j++;
            }

            // 更新最大地区范围
            res = Math.max(res, i - j + 1);
        }

        return res;
    }
}

Java代码

知识点:

  1. 滑动窗口
  2. 集合,排序,最大小值

文字解释:

int res 结果。

维护一个动态的窗口 S 来存储当前地区的高度。在每次遍历时,将当前地区的高度加入窗口 S 中,并排序该列表。

使用一个 while 循环来检查窗口的最大高度和最小高度之间的差是否大于给定的阈值 k,如果是,则从窗口最左侧移除元素,缩小窗口的范围。

通过比较当前地区的范围与之前的最大范围,更新最大地区范围 res。

全部评论
treeset是集合类的,删除元素时没有考虑是否为重复元素,所以[5,10,8,10,6,7],3这个例子是过不了的
点赞 回复 分享
发布于 2023-08-18 15:10 浙江

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-17 14:06
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务