leetcode-貪心算法

leetcode-貪心算法

길 (Song by 아이유, 헨리, 조현아, 양다일)

星空

拓展知識:貪心算法

貪心算法(貪婪算法)是指在對問題進行求解時,在每一步選擇中都採取最好或者最優(即最有利)的選擇,從而希望能夠導致結果是最好或者最優的算法。

要點:

1、在對問題求解時,總是做出在當前看來最好的選擇。即貪心算法不從整體最優上加以考慮。

2、貪心算法所作出的是在某種意義上的局部最優解。

貪心算法:
1、貪心算法中,作出的每步貪心決策都無法改變,因爲貪心策略是由上一步的最優解推導下一步的最優解,而上一部之前的最優解則不作保留。
2、貪心法正確的前提是:每一步的最優解一定包含上一步的最優解。

動態規劃:
1、全局最優解中一定包含某個局部最優解,但不一定包含前一個局部最優解,因此需要記錄之前的所有最優解;
2、動態規劃的關鍵是確定“狀態轉移方程”,即如何通過已經求出的局部最優解推導出全局最優解;
3、邊界條件:即最簡單的,可以直接得出的局部最優解。

例題:

給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別爲 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

**說明:**你不能傾斜容器,且 n 的值至少爲 2。

圖中垂直線代表輸入數組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示爲藍色部分)的最大值爲 49。

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        length = len(height)
        if length < 2:
            return 0
        res = 0

        left = 0
        right = length-1
        while left < right:
            water = (right-left) * min(height[left], height[right])
            res = max(res, water)
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        return res

每日一題

55. 跳躍遊戲

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後一個位置。
示例 2:

輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引爲 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/jump-game

之前刷了不少leetcode的題目,現在開始春招了,特地把之前寫的代碼上傳了github:https://github.com/czy36mengfei/leetcode,歡迎大家下載、star。

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