高级编程技术(Python)作业12

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

注意:你不能倾斜容器,n 至少是2。

Solution:

class Solution:
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        maxSpace = 0
        i = 0
        j = len(height) - 1
        while(i <= j):
            length = j - i
            if (height[i] < height[j]):
                h = height[i]
                i += 1
            else:
                h = height[j]
                j -= 1
            maxSpace = maxSpace if maxSpace > h * length else h * length    
        return maxSpace

思路:因为面积是取决于较小高度的端点,所以我们从两端开始取高度,每一次都使用较小的高度乘以距离算一次面积,和之前的最大面积比较并保存最大面积,然后较小的端点就往中间移动直到两个端点重合。

62.不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

说明:m 和 n 的值均不超过 100。
示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3
输出: 28

Solution:

class Solution:
    def factorial(self, num):
        if (num == 1 or num == 0):
            return 1
        else:
            return num * self.factorial(num-1)

    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        x = min(m, n) - 1
        y = m + n - 2
        return int(self.factorial(y) / (self.factorial(x) * self.factorial(y - x)))

思路:利用递归计算阶乘,然后使用组合数解决问题。可以使用数组保存阶乘结果来优化,本题数据较小,可以不用。

217.存在重复
给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数应该返回 true。如果每个元素都不相同,则返回 false。

Solution:

class Solution:
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if(len(nums) > 0):
            if (len(nums) != len(set(nums))):
                return True
            else:
                return False
        return False

思路:使用set函数将列表中的重复元素删除,然后比较前后的列表长度是否相同。
我一开始使用python写了hash表来判断重复元素,提交后虽然通过了,但是用的时间太长了,后来看了别人的代码,发现set可以解决这类问题,而python中set的实现其实就是通过hash表来实现的。

猜你喜欢

转载自blog.csdn.net/weixin_38311046/article/details/80153571