JS刷题!双指针4-最大矩形面积问题

189 阅读3分钟

1. 题目来源

稀土掘金-双指针No.16-最大矩形面积问题 (中等)- MarsCode

2. 解题思路

题目要求:对于给定的数组,我们需要找到任意K个相邻元素所能形成的最大矩形面积。这个矩形面积的计算方式是: k 个相邻元素中的最小高度乘以 k 

  1. 外层嵌套:遍历所有可能的 k 值,从 1 到 n
  2. 内层循环:遍历所有可能的起始位置 i ,从 0 到 n - k
  3. 计算最小值:使用 Math.minarray.slice 来计算从 i 开始的 k 个元素的最小值
  4. 计算面积:将最小值乘以 k 得到当前的矩形面积
  5. 更新最大面积:如果当前面积大于已知的最大面积,则更新最大面积

3. 题解

function solution(n, array) {
    // 存储最大面积,初始化为 0
    let maxArea = 0;
    // 外层循环:遍历可能的子数组的长度 k,从 1 到 n
    for (let k = 1; k <= n; k++) {
        // 内层循环:遍历子数组的起始位置 i,从 0 到 n - k
        for (let i = 0; i <= n - k; i++) {
            // 获取从 i 开始,长度为 k 的子数组的最小高度
            let minHeight = Math.min(...array.slice(i, i + k));
            // 计算以 k 为宽度,minHeight 为高度的矩形的面积
            let area = k * minHeight;
            // 如果当前计算出的面积大于已知的最大面积,则更新最大面积
            if (area > maxArea) {
                maxArea = area;
            }
        }
    }
    // 返回最大面积
    return maxArea;
}

function main() {
    // 测试 solution 函数,判断 solution(5, [1, 2, 3, 4, 5]) 的结果是否等于 9
    console.log(solution(5, [1, 2, 3, 4, 5]) === 9);
    // 测试 solution 函数,判断 solution(6, [5, 4, 3, 2, 1, 6]) 的结果是否等于 9
    console.log(solution(6, [5, 4, 3, 2, 1, 6]) === 9);
    // 测试 solution 函数,判断 solution(4, [4, 4, 4, 4]) 的结果是否等于 16
    console.log(solution(4, [4, 4, 4, 4]) === 16);
}

main();

4. 关于豆包MarsCode

4.1 推荐使用!

豆包MarsCode简单方便,上手快,能应对日常的编程任务,刷题时也能给你提供不错的解题思路和示例代码,很适合新手和老手,大大提高了工作效率;所以个人挺推荐使用豆包MarsCode去辅助开发!

4.2 HowieCong与MarsCode的经历

  1. 线上参加过两次的字节跳动 X 豆包MarsCode的青训营,积极参与其中,搭配着MarsCode去刷算法题和项目开发真能学到很多
  2. 线下在参加Pycon China 2024上海站时看到了MarsCode参展,MarsCode团队成员非常热情的,拿到了MarsCode的一些周边

❓其他

1. 疑问与作者HowieCong声明

  • 如有疑问、出错的知识,请及时点击下方链接添加作者HowieCong的其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong

  • 若想让作者更新哪些方面的技术文章或补充更多知识在这篇文章,请及时点击下方链接添加里面其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong

  • 声明:作者HowieCong目前只是一个前端开发小菜鸟,写文章的初衷只是全面提高自身能力和见识;如果对此篇文章喜欢或能帮助到你,麻烦给作者HowieCong点个关注/给这篇文章点个赞/收藏这篇文章/在评论区留下你的想法吧,欢迎大家来交流!

2. 作者社交媒体/邮箱-HowieCong