day7 盛水最多的容器

更新

这是以前做过的题,今天拿来又看了一遍,然后发现。。。运行时间没变,运行内存消耗从半个月前的8.5M变为了现在的14.6M。。。问题来了,是leetcode的算法更新了?蜜汁。。。
然后我想这,每次将较短的一边想内移动,但是以后的边必须比移动前的边长,不然它会成为新的短边而且两边直接的距离变短了,存水量也就变少了;所以可以直接加一个判断,一直让短边向内移动,移动到一条比它长的边的时候停止,然后比较现在与之前的水量。
本来以为是个重大发现,结果是速度从96ms提升到了80ms。
然后我尝试把原来所有水量存入数组然后排序输出最大值的方式改为了直接用if语句判断输出,增加了4ms时间(在原来方法里这样改好像会增加10ms+,看来这个新方法确实减少了判断次数),减少了0.4M的内存。难道这就是传说中的时间换空间吗?QwQ

总结

从这次新的方法看来,一个程序的优化,代码的精简是其中一部分,还有一部分算法的精简。

class Solution:
    def maxArea(self, h):
        """
        :type height: List[int]
        :rtype: int
        """
        l = 0
        r = len(h)-1
        V = 0
        aim = 0
        while l < r:
            V = min(h[l],h[r])*(r-l)
            if V > aim:
                aim = V
            if h[l] <= h[r]:
                new = l+1
                while new < r and h[new] <= h[l]:
                    new += 1
                l = new
            else:
                new = r-1
                while new > l and h[new] <= h[r]:
                    new -= 1
                r = new    
        return aim

–更新与2019年3月1日–

暴力枚举法

对所有线段两两配对,存储所有可能的容量,输出最高的容量。
下面代码在第42个通例的时候时间溢出了。

class Solution:
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        nums = enumerate(height)
        nums = sorted(nums, key=lambda x : x[1],reverse=False)
        print(nums)
        l = len(nums)
        V = 0
        aim = []
        for i in range(l):
            r = l - 1 
            while r > i:
                V = nums[i][1]*(nums[r][0]-nums[i][0])
                if V < 0:
                    V = -V
                print(nums[i][1],nums[r][0],nums[i][0],'V:',V)
                aim.append(V)
                r -= 1
        aim = sorted()
        print(aim)
        return aim[len(aim)-1]

改进

采用官方给的优化思想自己写了写。
这种方法主要是找到了一种新的方法去寻找最小的面积,还是要多储备一点算法的知识啊。
但是我下面这个代码速度并不是很快的,只打败了39%的人,我去评论翻翻速度更快一些的算法。

class Solution:
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        h = height
        l = 0
        r = len(height)-1
        V = 0
        aim = []
        while l < r:
            V = min(height[l],height[r])*(r-l)
            aim.append(V)
            if h[l] <= h[r]:
                l += 1
            elif h[l] > h[r]:
                r -= 1
        aim = sorted(aim)
        print(aim)
        return aim[-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值