欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【Leetcode 每日一题】2140. 解决智力问题

【Leetcode 每日一题】2140. 解决智力问题

2025/4/5 3:17:13 来源:https://blog.csdn.net/2401_88859777/article/details/146896810  浏览:    关键词:【Leetcode 每日一题】2140. 解决智力问题

问题背景

给你一个下标从 0 0 0 开始的二维整数数组 q u e s t i o n s questions questions,其中 q u e s t i o n s [ i ] = [ p o i n t s i , b r a i n p o w e r i ] questions[i] = [points_i, brainpower_i] questions[i]=[pointsi,brainpoweri]
这个数组表示一场考试里的一系列题目,你需要 按顺序 (也就是从问题 0 0 0 开始依次解决),针对每个问题选择 解决 或者 跳过 操作。解决问题 i i i 将让你 获得 p o i n t s i points_i pointsi 的分数,但是你将 无法 解决接下来的 b r a i n p o w e r i brainpower_i brainpoweri 个问题(即只能跳过接下来的 b r a i n p o w e r i brainpower_i brainpoweri 个问题)。如果你跳过问题 i i i,你可以对下一个问题决定使用哪种操作。
比方说,给你 q u e s t i o n s = [ [ 3 , 2 ] , [ 4 , 3 ] , [ 4 , 4 ] , [ 2 , 5 ] ] questions = [[3, 2], [4, 3], [4, 4], [2, 5]] questions=[[3,2],[4,3],[4,4],[2,5]]

  • 如果问题 0 0 0 被解决了, 那么你可以获得 3 3 3 分,但你不能解决问题 1 1 1 2 2 2
  • 如果你跳过问题 0 0 0,且解决问题 1 1 1,你将获得 4 4 4 分但是不能解决问题 2 2 2 3 3 3
    请你返回这场考试里你能获得的 最高 分数。

数据约束

  • 1 ≤ q u e s t i o n s . l e n g t h ≤ 1 0 5 1 \le questions.length \le 10 ^ 5 1questions.length105
  • q u e s t i o n s [ i ] . l e n g t h = 2 questions[i].length = 2 questions[i].length=2
  • 1 ≤ p o i n t s i , b r a i n p o w e r i ≤ 1 0 5 1 \le points_i, brainpower_i \le 10 ^ 5 1pointsi,brainpoweri105

解题过程

打家劫舍 的进阶版,记忆化每个问题是否解决的情况下得到的分数,从中找出最大值即可。

具体实现

递归

class Solution {public long mostPoints(int[][] questions) {int n = questions.length;long[] memo = new long[n];return dfs(0, questions, memo);}private long dfs(int i, int[][] questions, long[] memo) {if (i >= questions.length) {return 0;}if (memo[i] != 0) {return memo[i];}long skipCur = dfs(i + 1, questions, memo);long cur = dfs(i + 1 + questions[i][1], questions, memo) + questions[i][0];return memo[i] = Math.max(skipCur, cur);}
}

递推

class Solution {public long mostPoints(int[][] questions) {int n = questions.length;long[] dp = new long[n + 1];for (int i = n - 1; i >= 0; i--) {int j = Math.min(i + questions[i][1] + 1, n);dp[i] = Math.max(dp[i + 1], dp[j] + questions[i][0]);}return dp[0];}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词