练习3:LeeCode11. 盛最多水的容器

给定 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

解题思路

  • 问题本质
    • 在一个list中寻找:两个数值,其中比较小的值与这两个数值在index之间差值的乘积大于其他所有的两个数值的组合。
  • 解题逻辑
    • 按照index,计算每一个元素与在其index后的所有元素的乘积:比较大小,选择小的,然后计算index差,然后计
    • 每一个index为一组
      • 对每一个元素和其后每个进行计算
        • 比较大小,并选择小的
        • 计算index差
        • 用较小的乘以index差
        • 将结果放入一个字典:qindex1qindex2:finalresult
        • 将value作为一个list,找出最大value,以及其对应的键值对
        • 将本组中的最大值键值对放入最终的字典中
      • 选组最终字典中最大value对应的键值对,从而确定最大的两个组合
class Solution:
    def maxArea(self, height):
        dict1 = {}
        for i in range(len(height)-1):
            temp_height = height[i+1:]
            dict2={}
            for j in range(len(temp_height)):
                volume = min(height[i],temp_height[j])*(j+1)
                dict2[str(i)+'&'+str(i+j+1)] = volume
            all_value = list(dict2.values())
            one_max_value = max(all_value)
            dict1[list(dict2.keys())[all_value.index(one_max_value)]] = one_max_value
        max_value = max(dict1.values())
        max_value_no = list(dict1.values()).index(max_value)
        two_value = list(dict1.keys())[max_value_no].split('&')
        final_dict = {}
        for q in two_value:
            final_dict[q] = height[int(q)]
        return final_dict
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值