网站开发费用包括美工费吗巴彦淖尔 网站建设
网站开发费用包括美工费吗,巴彦淖尔 网站建设,做公众号关注网站,室内设计速成班学费Every day a Leetcode
题目来源#xff1a;2786. 访问数组中的位置使分数最大
解法1#xff1a;动态规划
状态数组#xff1a;
dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分#xff1b;dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问…Every day a Leetcode
题目来源2786. 访问数组中的位置使分数最大
解法1动态规划
状态数组
dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问的元素是奇数时的最大得分。
初始化
如果 nums[0] 是奇数dp[0][0] INT_MINdp[0][1] nums[0]如果 nums[0] 是偶数dp[0][0] nums[0]dp[0][1] INT_MIN。
状态转移
如果 nums[i] 是奇数 dp[i][0] dp[i - 1][0]dp[i][1] max(dp[i - 1][0] - x, dp[i - 1][1]) nums[i] 如果 nums[i] 是偶数 dp[i][0] max(dp[i - 1][0], dp[i - 1][1] - x) nums[i]dp[i][1] dp[i - 1][1]
答案max(dp[n - 1][0], dp[n - 1][1])。
代码
/** lc appleetcode.cn id2786 langcpp** [2786] 访问数组中的位置使分数最大*/// lc codestart
class Solution
{
public:long long maxScore(vectorint nums, int x){// 特判if (nums.empty())return 0;if (x 0)return accumulate(nums.begin(), nums.end(), 0LL);int n nums.size();// 状态数组// dp[i][0]: 访问下标范围 [0, i] 中的元素且最后访问的元素是偶数时的最大得分// dp[i][1]: 访问下标范围 [0, i] 中的元素且最后访问的元素是奇数时的最大得分vectorvectorlong long dp(n, vectorlong long(2, 0));// 初始化if (nums[0] % 2){dp[0][0] INT_MIN;dp[0][1] nums[0];}else{dp[0][0] nums[0];dp[0][1] INT_MIN;}// 状态转移for (int i 1; i n; i){if (nums[i] % 2){dp[i][0] dp[i - 1][0];dp[i][1] max(dp[i - 1][0] - x, dp[i - 1][1]) nums[i];}else{dp[i][0] max(dp[i - 1][0], dp[i - 1][1] - x) nums[i];dp[i][1] dp[i - 1][1];}}return max(dp[n - 1][0], dp[n - 1][1]);}
};
// lc codeend结果 复杂度分析
时间复杂度O(n)其中 n 是数组 nums 的长度。
空间复杂度O(n)其中 n 是数组 nums 的长度。
解法2动态规划 - 空间优化
我们发现dp[i][0] 和 dp[i][1] 只取决于它们前面的两个值dp[i - 1][0] 和 dp[i - 1][1]因此可以可以优化。
代码
// 动态规划 - 空间优化class Solution
{
public:long long maxScore(vectorint nums, int x){// 特判if (nums.empty())return 0LL;if (x 0)return accumulate(nums.begin(), nums.end(), 0LL);int n nums.size();long long odd nums[0] % 2 ? nums[0] : INT_MIN; // 奇数long long even nums[0] % 2 ? INT_MIN : nums[0]; // 偶数// 状态转移for (int i 1; i n; i){if (nums[i] % 2)odd max(odd, even - x) nums[i];elseeven max(odd - x, even) nums[i];}return max(odd, even);}
};结果 复杂度分析
时间复杂度O(n)其中 n 是数组 nums 的长度。
空间复杂度O(1)。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86617.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!