leetcode11-双指针

解法一:暴力法

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-双指针

上一篇:PS利用通道选区工具为偏暗的树林图片完美还原阳光色彩


下一篇:Photoshop将森林图片调成柔美的暖色调