erlang-leetcode(解题系列)2140. 解决智力问题(中等)

本文介绍了一种算法,用于解决一个特定的智力问题,该问题要求在考虑得分和跳过一定数量后续问题的情况下,求出能够获得的最高分数。通过动态规划的方法,文章详细解释了如何在给定的问题列表中选择解决问题的最佳策略。

解决智力问题-原题

给你一个下标从 0 开始的二维整数数组 questions ,其中 questions[i] = [pointsi, brainpoweri] 。

这个数组表示一场考试里的一系列题目,你需要 按顺序 (也就是从问题 0 开始依次解决),针对每个问题选择 解决 或者 跳过 操作。解决问题 i 将让你 获得  pointsi 的分数,但是你将 无法 解决接下来的 brainpoweri 个问题(即只能跳过接下来的 brainpoweri 个问题)。如果你跳过问题 i ,你可以对下一个问题决定使用哪种操作。

比方说,给你 questions = [[3, 2], [4, 3], [4, 4], [2, 5]] :
如果问题 0 被解决了, 那么你可以获得 3 分,但你不能解决问题 1 和 2 。
如果你跳过问题 0 ,且解决问题 1 ,你将获得 4 分但是不能解决问题 2 和 3 。
请你返回这场考试里你能获得的 最高 分数。

示例 1:

输入:questions = [[3,2],[4,3],[4,4],[2,5]]
输出:5
解释:解决问题 0 和 3 得到最高分。
- 解决问题 0 :获得 3 分,但接下来 2 个问题都不能解决。
- 不能解决问题 1 和 2
- 解决问题 3 :获得 2 分
总得分为:3 + 2 = 5 。没有别的办法获得 5 分或者多于 5 分。
示例 2:

输入:questions = [[1,1],[2,2],[3,3],[4,4],[5,5]]
输出:7
解释:解决问题 1 和 4 得到最高分。
- 跳过问题 0
- 解决问题 1 :获得 2 分,但接下来 2 个问题都不能解决。
- 不能解决问题 2 和 3
- 解决问题 4 :获得 5 分
总得分为:2 + 5 = 7 。没有别的办法获得 7 分或者多于 7 分。
 

提示:

1 <= questions.length <= 105
questions[i].length == 2
1 <= pointsi, brainpoweri <= 105

-spec most_points(Questions :: [[integer()]]) -> integer().
most_points(Questions) ->
    Map = maps:new(),
    List = lists:reverse(Questions),
    dp_most_points(List, Map, 1, 0)
  .

dp_most_points([], Map, Ind, Ans) ->
    Ans;
dp_most_points([[P, B] | List], Map, Ind, Ans) ->
    Last = Ind - B - 1,
    if
        Last > 0 ->
            LastMax = maps:get(Last, Map),
            Ans1 = max(Ans, P),
            NewAns = max(Ans1, LastMax + P);
        true ->
            NewAns = max(Ans, P)
    end,
    NewMap = maps:put(Ind, NewAns, Map),
    dp_most_points(List, NewMap, Ind + 1, NewAns).

错误:软件包:rabbitmq-server-3.13.7-1.el8.noarch (rabbitmq_server) 需要:erlang >= 26.0 已安装: erlang-23.3.4.11-1.el7.x86_64 (@rabbitmq-erlang) erlang = 23.3.4.11-1.el7 可用: erlang-R16B-03.18.el7.x86_64 (epel) erlang = R16B-03.18.el7 可用: erlang-20.3.8.25-1.el7.x86_64 (rabbitmq-erlang) erlang = 20.3.8.25-1.el7 可用: erlang-20.3.8.26-1.el7.x86_64 (rabbitmq-erlang) erlang = 20.3.8.26-1.el7 可用: erlang-21.3.8.14-1.el7.x86_64 (rabbitmq-erlang) erlang = 21.3.8.14-1.el7 可用: erlang-21.3.8.15-1.el7.x86_64 (rabbitmq-erlang) erlang = 21.3.8.15-1.el7 可用: erlang-21.3.8.16-1.el7.x86_64 (rabbitmq-erlang) erlang = 21.3.8.16-1.el7 可用: erlang-21.3.8.18-1.el7.x86_64 (rabbitmq-erlang) erlang = 21.3.8.18-1.el7 可用: erlang-21.3.8.21-1.el7.x86_64 (rabbitmq-erlang) erlang = 21.3.8.21-1.el7 可用: erlang-22.2.7-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.2.7-1.el7 可用: erlang-22.2.8-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.2.8-1.el7 可用: erlang-22.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3-1.el7 可用: erlang-22.3.1-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.1-1.el7 可用: erlang-22.3.2-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.2-1.el7 可用: erlang-22.3.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.3-1.el7 可用: erlang-22.3.4-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4-1.el7 可用: erlang-22.3.4.7-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.7-1.el7 可用: erlang-22.3.4.10-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.10-1.el7 可用: erlang-22.3.4.11-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.11-1.el7 可用: erlang-22.3.4.12-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.12-1.el7 可用: erlang-22.3.4.16-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.16-1.el7 可用: erlang-22.3.4.19-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.19-1.el7 可用: erlang-22.3.4.21-1.el7.x86_64 (rabbitmq-erlang) erlang = 22.3.4.21-1.el7 可用: erlang-23.1.2-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.1.2-1.el7 可用: erlang-23.1.5-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.1.5-1.el7 可用: erlang-23.2.1-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.1-1.el7 可用: erlang-23.2.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.3-1.el7 可用: erlang-23.2.4-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.4-1.el7 可用: erlang-23.2.5-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.5-1.el7 可用: erlang-23.2.6-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.6-1.el7 可用: erlang-23.2.7-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.7-1.el7 可用: erlang-23.2.7-2.el7.x86_64 (rabbitmq-erlang) erlang = 23.2.7-2.el7 可用: erlang-23.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3-1.el7 可用: erlang-23.3-2.el7.x86_64 (rabbitmq-erlang) erlang = 23.3-2.el7 可用: erlang-23.3.1-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.1-1.el7 可用: erlang-23.3.2-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.2-1.el7 可用: erlang-23.3.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.3-1.el7 可用: erlang-23.3.4-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4-1.el7 可用: erlang-23.3.4.1-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.1-1.el7 可用: erlang-23.3.4.3-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.3-1.el7 可用: erlang-23.3.4.4-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.4-1.el7 可用: erlang-23.3.4.5-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.5-1.el7 可用: erlang-23.3.4.6-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.6-1.el7 可用: erlang-23.3.4.7-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.7-1.el7 可用: erlang-23.3.4.8-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.8-1.el7 可用: erlang-23.3.4.10-1.el7.x86_64 (rabbitmq-erlang) erlang = 23.3.4.10-1.el7 您可以尝试添加 --skip-broken 选项来解决问题 您可以尝试执行:rpm -Va --nofiles --nodigest
07-13
<think>我们正在解决RabbitMQ安装时遇到的Erlang版本依赖问题。根据引用[1][2][3]的信息,RabbitMQ需要特定版本的Erlang支持,而当前系统安装的Erlang版本(R16B-03.18.el7)过低(需要>=26.0)。以下提供两种解决方案:升级Erlang版本或使用Docker安装RabbitMQ。 ### 解决方案一:升级Erlang并安装RabbitMQ(推荐) #### 步骤1:卸载旧版Erlang ```bash sudo yum remove erlang* -y sudo yum autoremove -y ``` #### 步骤2:添加Erlang 26+仓库 由于系统是CentOS/RHEL 7,需添加RabbitMQ官方提供的Erlang仓库: ```bash # 导入仓库密钥 sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc # 创建仓库文件 cat <<EOF | sudo tee /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/\$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOF ``` #### 步骤3:安装Erlang 26+ ```bash sudo yum clean all sudo yum makecache sudo yum install erlang-26.0 -y ``` #### 步骤4:验证Erlang版本 ```bash erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell ``` 输出应为`26.x`或更高版本。 #### 步骤5:安装RabbitMQ 3.13.7 ```bash # 添加RabbitMQ仓库 cat <<EOF | sudo tee /etc/yum.repos.d/rabbitmq.repo [rabbitmq-server] name=rabbitmq-server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/\$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOF # 安装RabbitMQ sudo yum install rabbitmq-server-3.13.7 -y ``` #### 步骤6:启动服务 ```bash sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server sudo rabbitmq-plugins enable rabbitmq_management ``` ### 解决方案二:使用Docker安装(快速规避依赖问题) 引用[4]提到,当系统版本(如CentOS 7)无法满足依赖时,可使用Docker安装: ```bash # 拉取RabbitMQ镜像(含管理插件) docker pull rabbitmq:3.13.7-management # 运行容器 docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ rabbitmq:3.13.7-management ``` 访问管理界面:`http://服务器IP:15672`(默认账号/密码:`guest`/`guest`)。 ### 注意事项 1. **版本兼容性**:RabbitMQ与Erlang版本必须严格匹配,具体对应关系参考[官方文档](https://www.rabbitmq.com/which-erlang.html)[^1]。 2. **强制安装风险**:引用[3]显示强制安装(`--nodeps`)会导致RabbitMQ无法运行,不推荐。 3. **环境清理**:若曾尝试错误安装,建议彻底卸载旧版: ```bash sudo yum remove rabbitmq-server -y sudo rm -rf /var/lib/rabbitmq/ ``` > **提示**:RabbitMQ 3.13.x需要Erlang 26+以支持新特性(如流式队列)[^1]。 §§相关问题§§ 1. 如何在ARM架构服务器上安装RabbitMQ? 2. 如何验证Erlang和RabbitMQ的版本兼容性? 3. 使用Docker部署RabbitMQ有哪些最佳实践? 4. 如何安全地升级生产环境的RabbitMQ版本? 5. RabbitMQ安装后如何进行基本安全配置?</think>### 解决 RabbitMQ 安装错误:需要 Erlang >= 26.0 根据您提供的错误信息和引用内容[^1][^3],RabbitMQ 3.13.7 需要 Erlang 26.0 或更高版本,而您的系统安装的是旧版 Erlang (R16B)。以下是完整解决方案: #### 方案一:安装匹配的 Erlang 版本(推荐) 1. **卸载旧版 Erlang** ```bash sudo yum remove erlang* -y sudo yum autoremove -y ``` 2. **添加 Erlang 26+ 仓库** ```bash # 导入仓库密钥 sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc # 添加仓库配置(CentOS/RHEL 7) cat <<EOF | sudo tee /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/\$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOF ``` 3. **安装 Erlang 26+** ```bash sudo yum clean all sudo yum makecache sudo yum install erlang-26.0 -y ``` 4. **验证安装** ```bash erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell ``` 应输出 `26.x` 或更高版本 5. **安装 RabbitMQ** ```bash # 添加 RabbitMQ 仓库 cat <<EOF | sudo tee /etc/yum.repos.d/rabbitmq.repo [rabbitmq-server] name=rabbitmq-server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/\$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOF sudo yum install rabbitmq-server-3.13.7 -y ``` #### 方案二:使用 Docker 安装(快速绕过依赖问题) 引用[^4]建议使用 Docker 作为替代方案: ```bash # 拉取带管理插件的镜像 docker pull rabbitmq:3.13.7-management # 运行容器 docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=secret \ rabbitmq:3.13.7-management ``` 访问管理界面:`http://服务器IP:15672`(使用 admin/secret 登录) #### 方案三:手动安装 Erlang RPM 如果仓库安装失败,可手动下载安装: 1. 从 [Erlang Solutions](https://www.erlang-solutions.com/downloads/) 下载 Erlang 26+ RPM 2. 安装: ```bash wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_26.0.2-1~centos~7_amd64.rpm sudo yum install esl-erlang_26.0.2-1~centos~7_amd64.rpm -y ``` ### 关键注意事项 1. **版本兼容性**:RabbitMQ 和 Erlang 必须版本匹配,参考[官方兼容表](https://www.rabbitmq.com/which-erlang.html)[^1] 2. **避免强制安装**:引用[^3]显示 `--nodeps` 安装会导致 RabbitMQ 无法正常运行 3. **环境清理**:安装前彻底移除旧版本 ```bash sudo yum remove rabbitmq-server -y sudo rm -rf /var/lib/rabbitmq/ ``` > **提示**:RabbitMQ 3.13.x 需要 Erlang 26+ 以支持新特性如流式队列和增强的 Quorum 队列[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值