You are given a 0-indexed integer array
You are initially standing at index
You want to reach the last index of the array (index
Return the maximum score you can get.
Example 1:
Input: nums = [1,-1,-2,4,-7,3], k = 2 Output: 7 Explanation: You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7.
Example 2:
Input: nums = [10,-5,-2,4,0,3], k = 3 Output: 17 Explanation: You can choose your jumps forming the subsequence [10,4,3] (underlined above). The sum is 17.
Example 3:
Input: nums = [1,-5,-20,4,-1,3,-6,-3], k = 2 Output: 0
Constraints:
1 <= nums.length, k <= 105 -104 <= nums[i] <= 104
Solution
這題還需要將 slicing window 和 DP 兩個概念結合在一起
一樣用個 stack 來記錄目前的最大值的 index
而一個關鍵點在,把原本的 nums 拿來當 DP 用,每次得到的當下最大值,都更新到 nums
kotlin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
fun maxResult(nums: IntArray, k: Int): Int { | |
val stack = mutableListOf<Int>() | |
var currValue = 0 | |
for(i in nums.indices) { | |
if(stack.isNotEmpty() && stack.first() == i - k - 1) { | |
stack.removeAt(0) | |
} | |
currValue = if(stack.isEmpty()) nums[i] else nums[i] + nums[stack.first()] | |
while(stack.isNotEmpty() && currValue > nums[stack.last()]) { | |
stack.removeAt(stack.lastIndex) | |
} | |
nums[i] = currValue | |
stack.add(i) | |
} | |
return currValue | |
} | |
} |
沒有留言:
張貼留言