LeetCode in Kotlin

2140. Solving Questions With Brainpower

Medium

You are given a 0-indexed 2D integer array questions where questions[i] = [pointsi, brainpoweri].

The array describes the questions of an exam, where you have to process the questions in order (i.e., starting from question 0) and make a decision whether to solve or skip each question. Solving question i will earn you pointsi points but you will be unable to solve each of the next brainpoweri questions. If you skip question i, you get to make the decision on the next question.

Return the maximum points you can earn for the exam.

Example 1:

Input: questions = [[3,2],[4,3],[4,4],[2,5]]

Output: 5

Explanation: The maximum points can be earned by solving questions 0 and 3.

Total points earned: 3 + 2 = 5. There is no other way to earn 5 or more points.

Example 2:

Input: questions = [[1,1],[2,2],[3,3],[4,4],[5,5]]

Output: 7

Explanation: The maximum points can be earned by solving questions 1 and 4.

Total points earned: 2 + 5 = 7. There is no other way to earn 7 or more points.

Constraints:

Solution

class Solution {
    fun mostPoints(questions: Array<IntArray>): Long {
        val n = questions.size
        val memo = LongArray(n)
        memo[n - 1] = questions[n - 1][0].toLong()
        for (i in n - 2 downTo 0) {
            if (i + questions[i][1] + 1 < n) {
                memo[i] = Math.max(memo[i + 1], questions[i][0] + memo[i + questions[i][1] + 1])
            } else {
                memo[i] = Math.max(memo[i + 1], questions[i][0].toLong())
            }
        }
        return memo[0]
    }
}