day5_leetcode11

Leetcode第11题:

 

1.题目:
        

 

2. 我的代码过程一:
       首先分析题意,就是给一个列表,然后以每一个元素的索引与其对应的元素构成一个坐标点,元素的大小就是该点的高度。然后要找出两两组合起来的体积最大的那个值,其实说体积不准确,因为是装水,所以两两组合时,考虑短板效应,高度要以最低的那个为准。
       我想了下,没找到什么特别的技巧,所以只得先写一段暴力解决方法:
代码:

class Solution(object):
    def maxArea(self, height):
        max_v = 0
        dic = {}
        for i, row in enumerate(height):
            dic[i] = row
        for i, row in dic.items():
            for j, col in dic.items():
                _min = row if row < col else col
                if (j-i)*_min > max_v:
                    max_v = (j-i)*_min
        return max_v


这段代码的时间复杂度是O(n)=n^3,也是最直接最暴力的方法,结果也是可以得到。但是,看图



看一下详细情况:
       


超出时间限制,也就是时间复杂度太大了,不能通过。那我就再想想能不能有什么减少复杂度的方法

 

3. 过程2:
代码:

class Solution(object):
    def maxArea(self, height):
        max_v = 0
        for i, row in enumerate(height):
            for j, col in enumerate(height):
                _min = row if row < col else col
                if (j-i)*_min > max_v:
                    max_v = (j-i)*_min
        return max_v


        时间复杂度O(n)=n^2,但是结果还是不能通过。之后我又想了一些方法,但是还是不行,最后只得求助了,但是leetcode是这样的,如果你没有一次通过的话,那你就看不到别人提交的范例。按理说这些题目拿去Google一下,肯定会有结果的,其实还可以去这个网站LintCode解题,


        然后将这一道题的题目放上去搜索就会有答案了,注意要用英文的题目。选择箭头所指就可以显示python的解答方法。
   
那个代码长这样:
                      
        我直接拿去运行了一下,通过了。但是效果并不好,运行结果如下:

                   
        后来我看了一下最优解法的代码,结果竟然只是在这个基础上改了一点点,而时间效果竟差了很多。最优解的代码如下:
                      
        你没看错,就是把上面的那个代码中的ans = max(ans, area)这段代码改成用条件判断语句,舍弃了python自带的max()方法竟然可以提升这么大。对了,这一段代码的执行结果如下:
        
        时间从156ms,变到了72ms,不可思议,但是从这儿我又发现了一个问题。上面最优解的那个执行时间是52ms,而我用同样的代码去提交,时间还是72ms,我想执行时间应该还和电脑配置有关吧。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大骨熬汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值