zoukankan      html  css  js  c++  java
  • 力扣 2020.07.30

    11. 乘最多水的容器

    题目

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

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

    思路

    我们可以遍历数组,分别求出各个横纵轴的面积,然后取最大面积进行返回。

    代码

    class Solution:
        def maxArea(self, height: List[int]) -> int:
            max_area = 0   #最大面积
            left = 0       #左侧下标
            right = len(height) - 1    #右侧下标
            while left < right:
                #比较上一次的最大面积和新的最大面积
                max_area = max(max_area, min(height[left], height[right]) * right - left)
                #按照长边为标准进行循环
                if height[right] > height[left]:
                    left += 1
                else:
                    right -= 1
                    
            return max_area
    

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(1)

     

     

    343. 整数拆分

    题目

    给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

    思路

    其实这是个纯数学问题,网上很多大虾也给出了好的解决办法,那就是一直择3出来做乘数,知道择不下去为止。

    也就是,3 * 3 * 3 * ... 这样子,就可以保证积最大。

    那么根据这个思路,当给定的整数小于3时,我们可以手动算出它的最大乘积。

    n=2时,最大乘积为1;n=3时,最大乘积为2.

    综上所述,可以看一下代码。

    代码

    class Solution:
        def integerBreak(self, n: int) -> int:
          # 给定的数字n小于3时,手动算出结果
            if n == 2:
                return 1
            if n == 3:
                return 2
            a = 1
           # 给定的数字大于3时,将全部的3择出来后,进行最后乘积的计算
            while (n > 4):
                n = n - 3
                a = a * 3
           # 返回最后的结果
            return a * n
    

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(1)

  • 相关阅读:
    老外的前端面试题
    java+tomcat 在 linux下的部署
    纯css实现slide效果
    使用 ADD-ON SDK 开发 基于 Html JQuery 和 CSS 的 firefox 插件入门教程1: 创建一个简单的 Add-on
    IOS ——OC——    @autoreleasepool的作用
    IOS ——OC——   代码块的理解
    IOS ——OC——   NSData的使用
    IOS ——OC——   NSDate的用法以及时差的消除
    IOS ——OC——  NSMutableCopy、NScopy 深拷贝与浅拷贝
    IOS ——OC——  协议的使用总结
  • 原文地址:https://www.cnblogs.com/young233/p/13405358.html
Copyright © 2011-2022 走看看