当前位置: 首页 > news >正文

【LeetCode 热题 100】11. 盛最多水的容器 | python 【中等】

边练习边更新,加油!!! 

更得没有做得快,乐

 题目:

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

注意:

  1. 双指针的典型应用!!!(做完之后茅塞顿通)

 标准做法:

先把两个指针指向0和-1

注意:①指针只能向内移动②只有矮的柱子变高,容积才有可能上升,所以谁矮移谁

class Solution:
    def maxArea(self, height: List[int]) -> int:
        l, r = 0, len(height) - 1
        ans = 0
        while l < r:
            area = min(height[l], height[r]) * (r - l)
            ans = max(ans, area)
            if height[l] <= height[r]:
                l += 1
            else:
                r -= 1
        return ans

作者:力扣官方题解
链接:https://leetcode.cn/problems/container-with-most-water/solutions/207215/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

自己的做法:【看题解后通过并超过】

参考了答案的思路,在寝室画了10分钟图

[ 用时: 7 m 42 s ]参考答案的向内侧移动的方法,只移动高的,不移动低的,只计算移动后高的,不计算移动后低的

可能比题解要算得快一些?因为在没有移动到更高的杆子的时候,没让它计算

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        a = 0
        b = len(height)-1
        v = (b-a)*min(height[a],height[b])
        max_v = v
        while a != b:
            if height[a]<height[b]:
                a += 1
                if height[a]>height[a-1]:
                    v = (b-a)*min(height[a],height[b])
            else:
                b -= 1
                if height[b]>height[b+1]:
                    v = (b-a)*min(height[a],height[b])
            if max_v<v:
                max_v = v
        return max_v

 1.超时O(n2):把所有容积储存起来是一个多么朴实无华的想法

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        # 长:j-i
        # 宽:min(height[i],j)
        # 最简单:每个都储存下来
        l = []
        for i,iz in enumerate(height):
            for j,jz in enumerate(height[i+1:]):
                l.append((j+1)*min(iz,jz))
        return max(l)

  2.超时O(n2):不存了,直接判断

只能说,内存从O(n2)到O(1)也是质的飞跃(只能显示出之前很蠢吧!!!找max还遍历一次)

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        # 长:j-i
        # 宽:min(height[i],j)
        # 最简单:每个都储存下来
        max_v = 0
        for i,iz in enumerate(height):
            for j,jz in enumerate(height[i+1:]):
                v = (j+1)*min(iz,jz)
                if max_v < v:
                    max_v = v
        return max_v

相关文章:

  • Unity Shader编程】之基础纹理
  • Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL
  • MySQL:CRUD(增删查改)
  • 鸿蒙Next-应用检测、安装以及企业内部商店的实现
  • 日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(19):(1)家族の呼び方(よびかた):家族人物(2)助词练习
  • FreeRTOS任务状态查询
  • 数据库原理5
  • JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
  • Greenplum6.19集群搭建
  • 【云岚到家】-实战问题(上)
  • ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0
  • STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步
  • 人工智能与深度学习的应用案例解析及代码实现
  • Ae 效果详解:VR 色差
  • 计算机视觉cv2入门之图像的读取,显示,与保存
  • 【江协科技STM32】ADC数模转换器-学习笔记
  • vue3 vite项目安装eslint
  • MATLAB程序代编液压系统电机非线性滑膜伺服模糊控制simulink仿真
  • 队列知识点最详细整理+总结(基于《王道数据结构考研复习指导》)
  • 数据库基础以及基本建库建表的简单操作
  • 济南网站建设培训/外链网址
  • 寿光做网站m0536/河北网络科技有限公司
  • 出名的网站建设软件/seo技术好的培训机构
  • 10天搞定网站开发/线上推广员是做什么的
  • Ext做网站/深圳短视频推广
  • 制作网页时什么是错误的做法/优化网站制作方法大全