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]

浙公网安备 33010602011771号