• leetcode11-盛最多水的容器


    原题链接leetcode11
    题目描述:长度为n的数组height,有n条垂线,找出两条垂线间能容纳的最多水量
    思路
    思路一:采用暴力的方式,双层循环处理,第一层循环拿到每一元素,然后第二层循环依次拿剩下的元素计算面积,每次计算完和已经计算的面积拿最大面积,双层循环完成得到最大面积,即为盛最多水。
    这种双层循环类似冒泡算法。时间复杂度是平方
    思路二:采用双指针处理方式,双指针可以将两层循环降为单层循环处理,减少循环次数,从而降低时间复杂度。时间复杂度是n级别的
    左指针从下标0开始,右指针从最后一个元素的位置开始,然后计算面积,由于盛水量的高度由最低的元素值决定,所以左右两个指针对应的元素值小的往后移动,然后重新进行计算,直到两个指针所指的元素为同一个元素终止循环计算。得到最终的最大面积

    /**
     * @param {number[]} height
     * @return {number}
     */
    /**
     * 思路:首先两层循环就可以解决,这样的话所有的都去进行了计算和比较
     * 单层循环的话,需要双指针,
     */
    var maxArea = function (height) {
        let n = height.length
        let left = 0, right = n - 1
        let area = 0
        while (left < right) {
            // 宽度为left和right之间的距离,高为height[left], heigth[right]之间最小的
            area = Math.max((right - left) * Math.min(height[left], height[right]), area)
            // height[left], heigth[right]哪个小就往后重新找值计算,直到左右两边元素相遇
            height[left] < height[right] ? left++ : right--
        }
        return area
    };
    let height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
    height = [1, 2]
    console.log(maxArea(height))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    Vue_事件修饰符
    《Cross-view Transformers for real-time Map-view Semantic Segmentation》论文笔记
    【算法】简单讲解如何使用两个栈实现一个队列
    力扣164最大间距
    10 vuex使用
    【CSS】基础使用,层级关系,选择器
    arcgis js 4.x实现类似openalayers加载tilewms图层效果
    集合_Collection_HashSet简述
    2023年最新一面二面通关王炸java八股文面试题--持续更新
    数据库实践 Hw05
  • 原文地址:https://blog.csdn.net/weixin_44789333/article/details/126671551