高級編程技術(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表來實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章