ZBLOG

int deleteAndEarn(vector& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); vector dp; unordered_map m; dp.push_back(nums[0]); m[nums[0]]=1; for(i...

在给定代码中,初始化和修改的问题如下:

  1. 初始化问题:

    • 在初始化dp向量时,使用了dp.push_back(nums[0])来添加第一个元素。但是没有对后面的元素进行处理。应该将这个初始化过程放在循环之前,并用一个变量记录前一个不同的元素。
    • 在初始化m哈希表时,只统计了nums[0]出现的次数,并且没有对后面的元素进行处理。需要将统计每个元素出现次数的逻辑放在循环之内。
  2. 修改问题:

    • if(nums[i] != dp.back()) 修改为 if(nums[i] != dp.back()+1),以满足题目要求:删除一个数可以获得该数对应点数,并且删除一个数后,相邻的两个数不能同时被选择。

以下是修改后的代码示例:

int deleteAndEarn(vector<int>& nums) {
    int n = nums.size(); 
    sort(nums.begin(), nums.end()); 
    vector<int> dp;
    unordered_map<int, int> m;  
    int prev = -1; // 用于记录前一个不同的元素

    for(int i = 0; i < n; i++) {
       if(nums[i] != prev) { 
           dp.push_back(0);
           m[nums[i]]++;
           prev = nums[i];
       } else {
           m[nums[i]]++;
       }
    }

    dp[0] = m[nums[0]] * nums[0];

    for(int i = 1; i < dp.size(); i++) {
       if(dp[i-1] + m[dp[i]] * dp[i] > dp[i-1]) {
           dp[i] = dp[i-1] + m[dp[i]] * dp[i];
       } else {
           dp[i] = dp[i-1];
       }
    }

    return dp.back();
}

请注意,这只是对给定代码的修改,是否完全符合题目要求还需要根据具体需求进行进一步验证和调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9675

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?