leetcode(25,26,27)-跳跃游戏,合并区间,不同路径

跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。

贪心算法

class Solution:
    def canJump(self, nums) :
        max_i = 0       #初始化当前能到达最远的位置
        for i, jump in enumerate(nums):   #i为当前位置,jump是当前位置的跳数
            if max_i>=i and i+jump>max_i:  #如果当前位置能到达,并且当前位置+跳数>最远位置  
                max_i = i+jump  #更新最远能到达位置
        return max_i>=i

作者:mo-lan-4
链接:https://leetcode-cn.com/problems/jump-game/solution/pythonji-bai-97kan-bu-dong-ni-chui-wo-by-mo-lan-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

合并区间

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: intervals = [[1,3],[2,6],[8,10],[15,18]]

输出: [[1,6],[8,10],[15,18]]

解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

链接:https://leetcode-cn.com/problems/merge-intervals

class Solution:
    def merge(self, intervals):
        ls = sorted(intervals, key = lambda x:x[0])
        ln = len(ls)
        print(ls)
        for i, data in enumerate(ls[:-1]):
            if ls[i+1][0]<=ls[i][1]:
                ls[i+1][0] = ls[i][0]
                ls[i+1][1] = max(ls[i+1][1],ls[i][1])
                ls[i] = None
        return [each for each in ls if each is not None]
s = Solution()

不同路径

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

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

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

链接:https://leetcode-cn.com/problems/unique-paths

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        f = [0 for _ in range(m)]
        f[0] = 1
        for i in range(0,n):
            for j in range(1,m):
                f[j] += f[j-1]
        return f[m-1]
posted @ 2020-09-10 15:15  木子士心王大可  阅读(144)  评论(0)    收藏  举报