zoukankan      html  css  js  c++  java
  • Leetcode_11【盛最多水的容器】

    文章目录:

    • 题目
    • 脚本一及注释
    • 脚本一逻辑
    • 脚本二及注释
    • 脚本二逻辑

    题目:

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    说明:你不能倾斜容器,且 n 的值至少为 2。

     

    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    示例:

    输入: [1,8,6,2,5,4,8,3,7]
    输出: 49


    脚本一及注释:【超时,但脚本是可实现此需求的】

    #coding:gbk
    list1 = [2,3,4,5,18,17,6]          #定义一个列表
    max1 = 0                     #定义一个数值为零的变量      
    n1 = 1                      #定义n1用于分片
    long1 = len(list1)               #获取列表的元素个数
    for i in range(long1):             #对列表元素个数组成的数列进行循环
        list2 = list1[n1:]             #取列表的分片,n1会随for循环自增
        n2 = 1                     #定义n2变量,用于获取遍历列表元素之间的长度,会随着for循环自增
        for j in list2:               #对分片后的列表进行遍历
            if list1[i] >= j:            #判断原列表遍历元素与分片后遍历元素的最小值
                curl = j * n2            #使用最小值乘以两元素长度
            else:                    
                curl = list1[i] * n2        #同上
            if max1 < curl:              #判断乘积是否大于记录最大值的变量
                max1 = curl              #若大于,则将乘积赋予最大值变量
            n2 += 1
        n1 += 1
    print(max1)

    脚本一逻辑:

    • 成最多水的容器必定为列表中两元素
    • 变量列表中的两两组合元素,求它们能装的水量,再与最大值进行对比,即可达到目标值

    脚本二及注释:【用时140ms】

    class Solution:
        def maxArea(self, height: List[int]) -> int:          #题目给定的输入及输出形式
            i,j,max1,long1 = 0,len(height) - 1,0,len(height) - 1   #分别给变量赋值
            while i < j:                           #当条件满足进入循环
                if height[i] <= height[j]:                 #判断列表中两元素的值大小
                    curl = height[i] * long1                #取小值并乘以两元素之间的宽度
                    i += 1                           #若小值为左边的,i加1
                else:
                    curl = height[j] * long1                #若小值为列表右边的元素,求乘积
                    j -= 1                           #j减去1
                if curl > max1:                        #与最大值进行比较判断
                    max1 = curl
                long1 -= 1                            #长度减去一
            return(max1)                            #循环结束,返回记录最大值的变量

    脚本二逻辑:

    • 此脚本最重要的逻辑是在什么情况下可以把列表中元素给剔除掉【最小值乘以其能连接的最大长度后,最小值元素可以剔除】
    • 同步比较列表两端的元素值大小,使用其中的小值乘以长度,并把乘积与记录最大值的变量进行比较,若大于最大值则替换
    • 每次比较完成后,长度都会减去1
    • 每次比较完成后,比较元素中都会有一个变化,或是左端向右移动一位;或是右端向左端移动一位,直到循环结束,此时已遍历了所有元素
  • 相关阅读:
    终端提示“ timed out waiting for input: auto-logout”
    shell-日志统计
    spring-file-upload-exceeds its maximum permitted size of 1048576 bytes
    全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
    GitLab: You are not allowed to force push code to a protected branch on this project.
    go 多版本管理
    glide install error
    js tab栏切换
    ES6 class命令浅识
    ES6 const命令
  • 原文地址:https://www.cnblogs.com/mailong/p/12008176.html
Copyright © 2011-2022 走看看