美文网首页
练习题---盛最多水的容器

练习题---盛最多水的容器

作者: MoonMonsterss | 来源:发表于2018-10-21 19:03 被阅读4次
"""
给定n个非负整数a1,a2,a3...an,每个数代表坐标中的一个点(i,ai)。画n条垂直线,使得垂直线i的两个端点分别为(i,ai)和(i,0)。找出其中的两条线,
使得他们与x轴共同构成的容器可以容纳最多的水.
"""

import random


def func1(nums):
   max_area = 0
   # 两层for循环可以解决该问题
   # 应该减2,前面写成了减1,虽然也是一样的结果,但减2才是正确的
   # 用前面的len(nums)-1个值和后一个值做比较
   for m in range(len(nums) - 2):
      for n in range(m + 1, len(nums)):
         # 水桶嘛,需要的是最小值
         max_area = max(max_area, (n - m) * min(nums[m], nums[n]))
   return max_area


def func2(nums):
   max_area = 0
   left = 0
   # 需要减1,刚写的时候给忽略这事报错了,比较下标要减一才行
   right = len(nums) - 1
   # 采用双指针的方式,分别由列表的两头向中间逼近,值较大的那一个指针不动,移动值较小的指针位置
   while left < right:
      max_area = max(max_area, (right - left) * min(nums[left], nums[right]))
      if nums[left] > nums[right]:
         right -= 1
      else:
         left += 1

   return max_area


nums = [random.randint(1, 30) for _ in range(10)]
print(nums)
print(func1(nums))
print(func2(nums))

相关文章

  • 练习题---盛最多水的容器

  • 盛最多水的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直...

  • 盛最多水的容器

    盛最多水的容器 给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。画n条垂直线,使...

  • 盛最多水的容器

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cont...

  • 盛最多水的容器

    题目描述 思路 题解代码

  • 盛最多水的容器

    盛最多水的容器 难度中等1826 收藏 分享 切换为英文 关注 反馈 给你 n 个非负整数 a1,a2,...,a...

  • 盛最多水的容器

    题目描述:  给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内...

  • 盛最多水的容器

    给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直...

  • 盛最多水的容器

    题目 https://leetcode-cn.com/problems/container-with-most-w...

  • 盛最多水的容器

    题目: 题目的理解: 计算两个数之间的面积,获取到最大的面积。 时间复杂度为O(n!), 当数量越大计算时间越长,...

网友评论

      本文标题:练习题---盛最多水的容器

      本文链接:https://www.haomeiwen.com/subject/aiwbzftx.html