1. Best Time to Buy and Sell Stock II (Leetcode Number: 122)
Find the diff between each adjacent elements and add the positive ones to get the best profit
class Solution:
def maxProfit(self, prices: List[int]) -> int:
res = 0
for i in range(1, len(prices)):
res += max(prices[i] - prices[i - 1], 0)
return res
2. Jump Game (Leetcode Number: 55)
The clause i + nums[i] defines the furthest element that the pointer could reach
class Solution:
def canJump(self, nums: List[int]) -> bool:
sum_jump = 0
i = 0
while i <= sum_jump:
# i + nums[i] defines the furthest element that the pointer could reach
sum_jump = max(i + nums[i], sum_jump)
if sum_jump >= len(nums) - 1:
return True
i += 1
return False
3. Jump Game II (Leetcode Number: 45)
Got confused with the constraints 0 <= nums[i] <= 1000, which in this case should be 0 < nums[i]
class Solution:
def jump(self, nums: List[int]) -> int:
if len(nums) == 1:
return 0
cur_jump, max_jump = 0, 0
steps = 0
for i in range(len(nums) - 1):
max_jump = max(i + nums[i], max_jump)
if i == cur_jump:
cur_jump = max_jump
steps += 1
return steps