首页 > 其他 > 详细

leetcode11-双指针

时间:2021-09-09 07:38:52      阅读:46      评论:0      收藏:0      [点我收藏+]

解法一:暴力法

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        lst=[]
        l=len(height)
        for i in range(l-1):
            for j in range(i+1,l):
                min_length=min(height[i],height[j])
                width=j-i
                s=min_length*width
                lst.append(s)
        return max(lst)
a=Solution()
print(a.maxArea([1,1]))
print(a.maxArea([4,3,2,1,4]))
print(a.maxArea([1,2,1]))

解法二:双指针

思路详解:寻找最大面积所在的两个边界位置

step1:指针1指向数的索引记为i,指针2指向数的索引记为j。最开始指针1指向最左边的数,指针2指向最右边的数。

step2:如果height[0]<height[len(height)-1],则把指针1往右移动一位。因为如果把i=0作为边界,无论j在哪,得到的结果都会比这个面积小。

step3:如果height[0]>height[len(height)-1],则把指针2往左移动一位。因为如果把j=len(height)-1作为边界,无论i在哪,得到的结果都会比这个面积小。

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        lst=[]
        l=len(height)
        i=0
        j=l-1
        while i<=j:
            lst.append(min(height[i],height[j])*(j-i))
            if height[i]<=height[j]:
                i+=1
            else:
                j-=1
        return max(lst)

注意:这里如果给max=0,那么max(lst)会报错!!!

leetcode11-双指针

原文:https://www.cnblogs.com/hugrice/p/15240101.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!