首页 > 编程语言 >吴师兄学算法day07 11. 盛最多水的容器

吴师兄学算法day07 11. 盛最多水的容器

时间:2024-01-15 11:34:30浏览次数:34  
标签:11 柱子 right res day07 height 最多水 移动 left

题目:11. 盛最多水的容器

难点:

  • 如何确定,每次只移动最短边,
  • 因为无论移动哪边的柱子,下面的底部一定是缩短的,剩下的就是取决于高度。
    • 如果移动的是,两侧高的那个,整体的面积一定是缩小的。
    • 如果移动的是,两侧底的那个,后面的柱子有可能是遇到高的,也有可能是低的,所以,整体面积可能大,也可能小。
  • 参考了K神的解题思路。

我的代码:

参考思路后,自己写的代码:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        left = 0
        right = len(height) -1
        # 面积S=高*底  本题高度由短边决定
        # s = min(height[left],height[right])*(right-left)
        ans = 0
        while left < right: # 每次移动短边            
            s = min(height[left],height[right]) * (right-left)
            ans = max(ans,s)    # 记录每次的最大值
            # 移动短边
            if height[left]<height[right]:
                left+=1
            else:
                right -=1
        return ans

K神的代码:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        i, j, res = 0, len(height) - 1, 0
        while i < j:
            if height[i] < height[j]:
                res = max(res, height[i] * (j - i))
                i += 1
            else:
                res = max(res, height[j] * (j - i))
                j -= 1
        return res

作者:Krahets
链接:https://leetcode.cn/problems/container-with-most-water/solutions/11491/container-with-most-water-shuang-zhi-zhen-fa-yi-do/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

老师的代码:

# https://www.algomooc.com/587.html
# 作者:程序员吴师兄
# 代码有看不懂的地方一定要私聊咨询吴师兄呀
# 盛最多水的容器 ( LeetCode 11) : https://leetcode-cn.com/problems/container-with-most-water/
class Solution:
    def maxArea(self, height: List[int]) -> int:
       # 设置两个索引,分别指向容器的两侧

       # 索引 left 指向最左边的柱子
       left = 0

       # 索引 right 指向最右边的柱子
       right = len(height) - 1

       # 设置一个变量用来保存当下水的最大面积
       res = 0

       # 移动 left 和 right,直到 left 和 right 相遇为止
       while left < right :

           # 水的宽度是 right - left
           width = right - left

           # 水的高度由两根柱子最短的那根决定
           h = min(height[left],height[right])

           # 计算此时水的面积
           area = width * h

           # 如果此时水的面积大于了我们之前保存的那个值,我们需要更新一下
           if area >= res :
               # 更新 res 的值为 area,确保 res 一直都是最大的值
               res = area
           
           # 接下来去观察需要移动哪根柱子:必定是最短的那根柱子

           # 如果左边的柱子更短,那么向内移动左边的柱子,因为只有这样,才有可能找到一个更高的水面
           # 在宽度一定变小的情况下,水的面积才有可能增大
           if height[left] < height[right] :
               # 向内移动左边的柱子
               left += 1

           # 如果右边的柱子更短,那么向内移动右边的柱子,因为只有这样,才有可能找到一个更高的水面
           # 在宽度一定变小的情况下,水的面积才有可能增大
           else:
               # 向内移动右边的柱子
               right -= 1
            
       # 最后返回最大的面积 res 即可
       return res

 

总结:

  • 不会就多看,多学。学习使我快乐!!

参考:

https://r07na4yqwor.feishu.cn/docx/WcAVdEBD5o8DhQxIqkccvDZqnHh

Krahets题解链接

标签:11,柱子,right,res,day07,height,最多水,移动,left
From: https://www.cnblogs.com/liqi175/p/17965020

相关文章

  • 吴师兄学算法day07 167. 两数之和 II - 输入有序数组
    题目:167. 两数之和II-输入有序数组易错点:下标为1开始我的代码:classSolution:deftwoSum(self,numbers:List[int],target:int)->List[int]:right=len(numbers)-1left=0whileleft<right:ans=numbers[left]......
  • P1145 约瑟夫
    题目链接:考虑使用循环链表来维护该环形数据结构。但下列代码只能通过70/100#include<bits/stdc++.h>usingnamespacestd;intne[50];intmain(){ intk,n,m; boolflag=true; cin>>k; n=2*k,m=k+1; for(inti=1;i<n;i++)ne[i]=i+1;......
  • 11.10
    《程序员的修炼之道:从小工到专家》的第三章节主要探讨了“技术深度与广度”的问题。这一章节强调了技术深度和广度对于程序员的重要性,以及如何在这两个方面取得平衡。首先,作者指出技术深度是程序员的核心竞争力。只有深入理解某个领域的技术,才能更好地解决相关问题。因此,程序员需......
  • 11.8
    《代码大全2》是一本非常经典的软件开发书籍。在书中,强调了比较优秀的代码结构和命名规范的重要性。书中注释的部分帮助我理解怎么去编写有意义的注释,合适的注释可以提供代码理解上的便利,但是过多或者无关的注释会干扰代码的可读性。还有书中关于代码复用和模块化的内容帮助学习......
  • 11.15
    语法说明如下:1)过程名存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。2)过程参数存储过程的参数列表。其中,<参数名......
  • 吴师兄学算法day07 双指针 125. 验证回文串
    题目:125. 验证回文串易错点:isaplha()isdigit()lower()要熟悉,挺有用的。我的代码:classSolution:defisPalindrome(self,s:str)->bool:ans=''foriins:ifi.isalpha()ori.isdigit():ans+=i.lower()#......
  • 10.11
    今天我对堆进行了深入的学习,理解了最大堆和最小堆的基本概念和操作。我通过编写代码实践了堆的创建、插入和删除等操作,这让我对这些知识点有了更深刻的理解。明天我计划进一步探索堆的高级应用,尝试解决实际问题并编写一个简单的堆程序。在处理复杂的堆问题时,我发现自己在构建和管......
  • 20240113-力扣704二分查找
    leetcode链接:https://leetcode.cn/problems/binary-search/solutions/980494/er-fen-cha-zhao-by-leetcode-solution-f0xw/代码随想录链接:https://programmercarl.com/0704.二分查找.html#算法公开课考点:二分查找解决代码:classSolution{publicintsearch(int[]num......
  • MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_pa
    我使用的版本是MySQL5.73,环境是LinuxCentOS7,其他版本不知道是否可行,望谅解。当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下:setglobalvalidate_password_policy=0;setglobalvalidate_password_length=1;但是当我们使用的时候,却报了这样一个......
  • 吴师兄学算法day07 双指针 9. 回文数
    题目:9. 回文数易错点:右指针要记得移动我的代码:classSolution:defisPalindrome(self,x:int)->bool:array=list(str(x))right=len(array)-1forleftinrange(len(array)//2):ifarray[left]==array[right]:......