当前位置: 首页 > wzjs >正文

网站建设零金手指专业网络事件营销

网站建设零金手指专业,网络事件营销,做网站成都哪家公司最好,深圳有名的建筑公司题目: 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。…

题目:

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

示例 1:

输入:nums = [3,4,2]
输出:6
解释:
删除 4 获得 4 个点数,因此 3 也被删除。
之后,删除 2 获得 2 个点数。总共获得 6 个点数。

示例 2:

输入:nums = [2,2,3,3,3,4]
输出:9
解释:
删除 3 获得 3 个点数,接着要删除两个 2 和 4 。
之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。
总共获得 9 个点数。

提示:

  • 1 <= nums.length <= 2 * 10^4
  • 1 <= nums[i] <= 10^4

解法:动态规划

这个问题可以通过动态规划来解决。我们可以将问题转化为一个类似于“打家劫舍”的问题,即不能选择相邻的元素。具体来说,我们可以通过以下步骤来解决这个问题:

问题分析

  1. 选择元素:每次选择一个元素 nums[i],获得 nums[i] 的点数。

  2. 删除相邻元素:删除所有等于 nums[i] - 1 和 nums[i] + 1 的元素。

  3. 目标:最大化获得的点数。

解决思路

  1. 统计每个数字的出现次数:我们可以用一个哈希表(或数组)来统计每个数字的出现次数,并计算每个数字的总点数(即数字乘以它的出现次数)。

  2. 转化为动态规划问题:类似于“打家劫舍”问题,我们不能选择相邻的数字。因此,我们可以使用动态规划来计算最大点数。

  3. 状态转移方程

    • 如果选择当前数字 i,则不能选择 i-1,所以最大点数为 dp[i-2] + points[i]

    • 如果不选择当前数字 i,则最大点数为 dp[i-1]

    • 因此,状态转移方程为:

                                  dp[i]=max⁡(dp[i−1],dp[i−2]+points[i])

代码实现

class Solution {
public:int deleteAndEarn(vector<int>& nums) {if (nums.empty()) return 0;// 找到数组中的最大值int maxNum = *max_element(nums.begin(), nums.end());// 统计每个数字的总点数vector<int> points(maxNum + 1, 0);for (int num : nums) {points[num] += num;}// 动态规划数组vector<int> dp(maxNum + 1, 0);dp[0] = 0; // 没有数字时点数为 0dp[1] = points[1]; // 只有一个数字时点数为 points[1]// 填充 dp 数组for (int i = 2; i <= maxNum; ++i) {dp[i] = max(dp[i-1], dp[i-2] + points[i]);}// 返回最大点数return dp[maxNum];}
};

代码解释

  1. 统计每个数字的总点数

    • 使用 points 数组来存储每个数字的总点数。例如,如果数字 3 出现了 2 次,则 points[3] = 3 * 2 = 6

  2. 动态规划数组 dp

    • dp[i] 表示从 0 到 i 的数字中可以获得的最大点数。

    • 初始化 dp[0] = 0(没有数字时点数为 0)和 dp[1] = points[1](只有一个数字时点数为 points[1])。

  3. 状态转移

    • 对于每个数字 i,我们有两种选择:

      • 不选择 i,则最大点数为 dp[i-1]

      • 选择 i,则最大点数为 dp[i-2] + points[i]

    • 我们取这两种选择中的最大值作为 dp[i]

  4. 返回结果

    • 最终 dp[maxNum] 就是可以获得的最大点数。

示例

假设输入数组为 [3, 4, 2],执行过程如下:

  1. 统计每个数字的总点数:

    • points = [0, 0, 2, 3, 4](因为数字 2 出现 1 次,3 出现 1 次,4 出现 1 次)。

  2. 动态规划:

    • dp[0] = 0

    • dp[1] = 0

    • dp[2] = max(dp[1], dp[0] + 2) = max(0, 2) = 2

    • dp[3] = max(dp[2], dp[1] + 3) = max(2, 3) = 3

    • dp[4] = max(dp[3], dp[2] + 4) = max(3, 6) = 6

  3. 返回结果 6

时间复杂度

  • 时间复杂度为 O(n + k),其中 n 是数组 nums 的长度,k 是数组中的最大值。

    • 统计每个数字的总点数需要 O(n)

    • 动态规划需要 O(k)

空间复杂度

  • 空间复杂度为 O(k),用于存储 points 和 dp 数组。

总结

通过将问题转化为动态规划问题,我们可以高效地解决这个问题。关键在于统计每个数字的总点数,并使用状态转移方程来计算最大点数。

http://www.dtcms.com/wzjs/523125.html

相关文章:

  • 优秀网页设计作品赏析免费seo软件
  • 做网站支付系统难度如何做电商
  • 网站开发所需资料网络销售推广是做什么的具体
  • wordpress 类似建站帮别人推广app赚钱
  • 电子商务网站有哪些内容产品营销方案案例范文
  • 西安本地十家做网站建设的公司网站运营怎么做
  • 做淘宝网站目的是什么怎么自己创建网页
  • 网站建设常见问题解决方案手机导航下载2022新版
  • 网站建设方案服务器中国搜索引擎排名2021
  • 建设通网站电话网络营销策划推广公司
  • 微信朋友圈的网站连接怎么做自动点击器怎么用
  • 做网站的流程做运营需要具备什么能力
  • 房产官方网站cms网站模板
  • 建设网站一定要备案吗互动营销经典案例
  • 南通网站怎么推广有哪些可以推广的平台
  • 宜昌网站建设多少钱俄罗斯搜索引擎推广
  • 长沙网络推广哪家好武汉seo关键词排名优化
  • 湖州市城乡建设局网站线上宣传推广方式
  • 网奇e游通旅游网站建设系统如何修改上传到服务器做网站建网站公司
  • 惠州品牌网站建设价格优化算法
  • 做淘宝还是京东还是做网站东莞谷歌推广公司
  • 建设银行E路航如何自动进入网站自己接单的平台
  • 传奇私服的网站是怎么做的新闻发布平台
  • html企业网站模板下载网络加速器
  • dw建设的网站上传hao123网址大全浏览器设为主页
  • 湖南做网站公司爱站工具下载
  • 陇西做网站的广告店360营销平台
  • 学做网站php吗简述seo的应用范围
  • 免费生成app北京seo关键词排名
  • bbs网站模板广东今天新闻最新消息