当前位置: 首页剑指offer刷题第六期问题详情 【动态规划专题】剑指 Offer 47. 礼物的最大价值 本问题对应课程链接:剑指offer刷题第六期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 13 个回答
打卡
class Solution {
public int jewelleryValue(int[][] frame) {
int m = frame.length;
int n = frame[0].length;
}
时间:O(mn)
空间:O(mn)
时间复杂度:O(n*m)
空间复杂度:O(n)
class Solution {>& frame) {
public:
int jewelleryValue(vector<vector
int m = frame.size(), n = frame[0].size();
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(i 0 && j 0) continue;
if(i 0) frame[i][j] += frame[i][j – 1] ;
else if(j 0) frame[i][j] += frame[i – 1][j];
else frame[i][j] += max(frame[i][j – 1], frame[i – 1][j]);
}
}
return frame[m – 1][n – 1];
}
};
打卡
时间复杂度$O(mn)$,空间复杂度$O(1)$
和最小路径和类似
class Solution {
public int jewelleryValue(int[][] frame) {
int[][] dp = new int[frame.length][frame[0].length];
dp[0][0] = frame[0][0];
for(int i = 1; i < frame.length;i++)
dp[i][0] = dp[i-1][0] + frame[i][0];
for(int j = 1; j < frame[0].length; j++)
dp[0][j] = dp[0][j-1] + frame[0][j];
for(int i = 1; i < frame.length; i++){
for(int j = 1; j < frame[0].length; j++){
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1])+frame[i][j];
}
}
return dp[frame.length – 1][frame[0].length – 1];
}
}
//时间Onm
//空间O1
class Solution {>& frame) {
public:
int jewelleryValue(vector<vector
//细分边界,一一讨论
for(int i=0;i<frame.size();i++){
for(int j=0;j<frame[0].size();j++){
if(i0&& j0) continue;
else if(i0) frame[i][j] = frame[i][j-1] + frame[i][j];
else if(j0) frame[i][j] = frame[i-1][j] + frame[i][j];
else frame[i][j] = max(frame[i-1][j],frame[i][j-1]) + frame[i][j];
}
}
return frame[frame.size()-1][frame[0].size()-1];
}
};
时间:O(mn)
空间:O(n)
“`c++>& frame) { dp(col, 0);
class Solution {
public:
int jewelleryValue(vector
int row = frame.size(), col = frame[0].size();
vector
dp[0] = frame[0][0];
for (int j=1; j
class Solution {>& frame) { > dp(m, vector (n, 0));
public:
int jewelleryValue(vector<vector
int m = frame.size(), n = frame[0].size();
vector<vector
int res = 0;
for(int i = 0; i < m; i ++) {
for(int j = 0; j < n; j ++) {
if(i 0 && j 0) dp[i][j] = frame[i][j];
else if(i 0) dp[i][j] = frame[i][j] + dp[i][j – 1];
else if(j 0) dp[i][j] = frame[i][j] + dp[i – 1][j];
else {
dp[i][j] += frame[i][j] + max(dp[i][j – 1], dp[i – 1][j]);
}
res = max(res, dp[i][j]);
}
}
return res;
}
//时间复杂度O(MN),空间复杂度O(MN)
};