leetcode LeetCode 45. 跳跃游戏 II LeetCode134. 加油站

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class :
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
dp = [0]*len(nums)
dp[0] = nums[0]
for i in range(1,len(nums)):
if dp[i-1]>=i:
dp[i] = max(dp[i-1],nums[i]+i)
else:
return False
return dp[len(nums)-1] >= len(nums)-1

LeetCode 45. 跳跃游戏 II

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class (object):
def jump(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)

res = 0
last,cur = 0,0
for i in range(n-1):
cur = max(cur,i+nums[i])
if i == last:
last = cur
res += 1
if cur > n-1:
break
return res

LeetCode134. 加油站

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:

  • 如果题目有解,该答案即为唯一答案。
  • 输入数组均为非空数组,且长度相同。
  • 输入数组中的元素均为非负数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class (object):
def canCompleteCircuit(self, gas, cost):
"""
:type gas: List[int]
:type cost: List[int]
:rtype: int
"""
sum_,total = 0,0
start = 0
for i in range(len(gas)):
total += gas[i] - cost[i]
sum_ += gas[i] - cost[i]
if sum_<0:
start = i+1
sum_ = 0
return -1 if total<0 else start