leetcode-贪心算法

leetcode-贪心算法

leetcode-贪心算法_第1张图片

길 (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。

你可能感兴趣的:(编程)