weixin_53185809 2023-08-18 10:48 采纳率: 90.9%
浏览 6
已结题

关于#算法#的问题,请解答

小静有n个彩色弹珠,每个弹珠都有一种颜色,你可以挑选一个区间[l,r]的弹珠带走,不过,如果该区间内某一种颜色
的弹珠的个数超过m个,则该颜色的所有弹珠会被小静要回去,即只能带走在区间中个数不超过m个的那些颜色的弹
珠。
请问,如何能选出一个区间,使得你可以带走最多的弹珠?

我写了一个代码,但是WA了2个点,一个是8725写成了8550

请帮我修改,谢谢

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    unordered_map<int, int> count; // 用来统计每种颜色的弹珠个数
    int colors[n];
    for (int i = 0; i < n; i++) {
        cin >> colors[i];
        count[colors[i]]++;
    }

    int result = 0;
    int left = 0, right = 0; // 滑动窗口的左右指针
    unordered_map<int, int> window; // 用来统计滑动窗口内每种颜色的弹珠个数
    while (right < n) {
        window[colors[right]]++;

        // 当窗口内某种颜色的弹珠个数超过m个时,缩小窗口
        while (window[colors[right]] > m) {
            window[colors[left]]--;
            left++;
        }

        // 更新结果,取最大值
        result = max(result, right - left + 1);

        right++;
    }

    cout << result << endl;

    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-18 12:43
    关注

    【以下回答由 GPT 生成】

    错误在于将数字8725写成了8550。该错误出现在下面的代码行中:

    while (right < n) {
        window[colors[right]]++;
    
        // 当窗口内某种颜色的弹珠个数超过m个时,缩小窗口
        while (window[colors[right]] > m) {
            window[colors[left]]--;
            left++;
        }
    
        // 更新结果,取最大值
        result = max(result, right - left + 1);
    
        right++;
    }
    

    应该将 window[colors[right]] 修改为 window[colors[left]],如下所示:

    while (right < n) {
        window[colors[right]]++;
    
        // 当窗口内某种颜色的弹珠个数超过m个时,缩小窗口
        while (window[colors[left]] > m) {
            window[colors[left]]--;
            left++;
        }
    
        // 更新结果,取最大值
        result = max(result, right - left + 1);
    
        right++;
    }
    

    修改后的代码已经修复了错误。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来