AI刷题-饭馆菜品选择问题、构造回文字符串问题

目录

一、饭馆菜品选择问题

问题描述

测试样例

解题思路: 

问题理解

数据结构选择

算法步骤

最终代码:

运行结果: 

二、构造回文字符串问题 

 

问题描述

测试样例

解题思路: 

解题思路

具体步骤

最终代码: 

运行结果:​编辑 


一、饭馆菜品选择问题

问题描述

小C来到了一家饭馆,这里共有 nn 道菜,第 ii 道菜的价格为 a_i。其中一些菜中含有蘑菇,s_i 代表第 ii 道菜是否含有蘑菇。如果 s_i = '1',那么第 ii 道菜含有蘑菇,否则没有。

小C希望点 kk 道菜,且希望总价格尽可能低。由于她不喜欢蘑菇,她希望所点的菜中最多只有 mm 道菜含有蘑菇。小C想知道在满足条件的情况下能选出的最小总价格是多少。如果无法按照要求选择菜品,则输出-1


测试样例

样例1:

输入:s = "001", a = [10, 20, 30], m = 1, k = 2
输出:30

样例2:

输入:s = "111", a = [10, 20, 30], m = 1, k = 2
输出:-1

样例3:

输入:s = "0101", a = [5, 15, 10, 20], m = 2, k = 3
输出:30

解题思路: 

问题理解

小C需要从 n 道菜中选择 k 道菜,且希望总价格尽可能低。同时,她希望所点的菜中最多只有 m 道菜含有蘑菇。我们需要找到满足这些条件的最小总价格,如果无法满足条件则返回 -1

数据结构选择

  1. 菜品数组:我们可以将菜品的价格和是否含有蘑菇的信息存储在一个结构体或类中,以便于后续处理。
  2. 排序:为了找到最小总价格,我们可以先对菜品按价格进行排序。

算法步骤

  1. 初始化:创建一个结构体或类来存储菜品的价格和是否含有蘑菇的信息。
  2. 排序:按价格对菜品进行排序。
  3. 选择菜品:从排序后的菜品中选择 k 道菜,确保最多有 m 道菜含有蘑菇。可以使用贪心算法来逐步选择价格最低的菜品,同时记录已选择的含有蘑菇的菜品数量。
  4. 检查条件:如果在选择过程中发现无法满足条件(即含有蘑菇的菜品数量超过 m),则返回 -1
  5. 计算总价格:如果成功选择 k 道菜,则计算总价格并返回。

 

最终代码:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <limits> // 添加头文件以使用 std::numeric_limitsusing namespace std;long solution(const std::string& s, const std::vector<int>& a, int m, int k) {// 将菜品分为含有蘑菇和不含有蘑菇两类std::vector<int> mushroomPrices;std::vector<int> noMushroomPrices;for (int i = 0; i < s.size(); ++i) {if (s[i] == '1') {mushroomPrices.push_back(a[i]);} else {noMushroomPrices.push_back(a[i]);}}// 对两类菜品的价格进行排序std::sort(mushroomPrices.begin(), mushroomPrices.end());std::sort(noMushroomPrices.begin(), noMushroomPrices.end());// 初始化最小总价格为一个较大的值long minTotalPrice = std::numeric_limits<long>::max(); // 使用 std::numeric_limits<long>::max()// 尝试从两类菜品中选择 k 道菜for (int i = 0; i <= std::min(m, (int)mushroomPrices.size()); ++i) {int j = k - i; // 需要选择的不含有蘑菇的菜品数量// 检查是否可以满足条件if (j <= noMushroomPrices.size()) {// 计算当前组合的总价格long currentTotalPrice = 0;// 计算含有蘑菇的菜品价格for (int x = 0; x < i; ++x) {currentTotalPrice += mushroomPrices[x];}// 计算不含有蘑菇的菜品价格for (int y = 0; y < j; ++y) {currentTotalPrice += noMushroomPrices[y];}// 更新最小总价格minTotalPrice = std::min(minTotalPrice, currentTotalPrice);}}// 如果无法满足条件,返回 -1return minTotalPrice == std::numeric_limits<long>::max() ? -1 : minTotalPrice; // 检查是否仍然是最大值
}int main() {std::cout << (solution("001", {10, 20, 30}, 1, 2) == 30) << std::endl;std::cout << (solution("111", {10, 20, 30}, 1, 2) == -1) << std::endl;std::cout << (solution("0101", {5, 15, 10, 20}, 2, 3) == 30) << std::endl;return 0;
}

运行结果: 

 

二、构造回文字符串问题 

 

问题描述

小C手中有一个由小写字母组成的字符串 s。她希望构造另一个字符串 t,并且这个字符串需要满足以下几个条件:

  1. t 由小写字母组成,且长度与 s 相同。
  2. t 是回文字符串,即从左到右与从右到左读取相同。
  3. t 的字典序要小于 s,并且在所有符合条件的字符串中字典序尽可能大。

小C想知道是否能构造出这样的字符串 t,输出这样的t。如果无法构造满足条件的字符串,则输出 -1


测试样例

样例1:

输入:s = "abc"
输出:'aba'

样例2:

输入:s = "cba"
输出:'cac'

样例3:

输入:s = "aaa"
输出:'-1'

解题思路: 

 

要解决这个问题,我们需要构造一个字符串 t,它满足以下条件:

  1. t 的长度与 s 相同。
  2. t 是回文字符串。
  3. t 的字典序要小于 s,并且在所有符合条件的字符串中字典序尽可能大。

解题思路

  1. 回文特性

    • 回文字符串的特点是正读和反读都相同。因此,我们可以通过构造前半部分来确定整个回文字符串。
  2. 字典序比较

    • 为了使 t 的字典序小于 s,我们需要在前半部分找到一个位置,使得该位置的字符小于 s 对应位置的字符。
    • 为了使 t 的字典序尽可能大,我们需要在找到这个位置后,尽可能使后续的字符最大。
  3. 构造回文

    • 如果 s 本身就是回文且所有字符都相同(例如 "aaa"),则无法构造出满足条件的 t,直接返回 -1
    • 否则,从前半部分开始,找到第一个可以减小的字符位置,然后构造回文。

具体步骤

  1. 检查是否已经是回文且所有字符相同

    • 如果是,直接返回 -1
  2. 从前半部分开始,找到第一个可以减小的字符位置

    • 例如,对于 s = "abc",前半部分是 "a",找到第一个可以减小的字符位置。
  3. 构造回文

    • 在找到的位置减小字符,然后构造回文。
    • 例如,对于 s = "abc",找到 "a" 可以减小为 "a",构造回文 "aba"
  4. 返回结果

    • 如果成功构造出满足条件的回文,返回该回文;否则返回 -1

最终代码: 

#include <iostream>
#include <string>
using namespace std;string solution(string s) {int n = s.length();string t = s;  // 转换为列表,方便修改// 先构建一个回文字符串for (int i = 0; i < n / 2; ++i) {t[n - i - 1] = t[i];  // 保持回文性}// 如果初始回文字符串已经小于s,直接返回if (t < s) {return t;}// 否则,从中间开始向前调整for (int i = (n - 1) / 2; i >= 0; --i) {if (t[i] > 'a') {  // 如果当前字符大于 'a',可以减小t[i] = t[i] - 1;t[n - i - 1] = t[i];  // 保持回文性// 调整后面的位置为尽可能的小字符 'z',确保字典序最小for (int j = i + 1; j < n - i - 1; ++j) {t[j] = 'z';t[n - j - 1] = t[j];}// 生成回文字符串并检查字典序if (t < s) {return t;} else {// 如果调整后仍然不满足条件,继续尝试下一个字符t[i] = s[i];t[n - i - 1] = s[i];}}}return "-1";
}int main() {cout << (solution("abc") == "aba") << endl;  // 输出 1 (true)cout << (solution("cba") == "cac") << endl;  // 输出 1 (true)cout << (solution("aaa") == "-1") << endl;  // 输出 1 (true)return 0;
}

运行结果: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用redis-cli命令实现redis crud操作

项目场景&#xff1a; 线上环境上redis中的key影响数据展示&#xff0c;需要删除。但环境特殊没办法通过 redis客户端工具直连。只能使用redis-cli命令来实现。 操作步骤&#xff1a; 1、确定redis安装的服务器&#xff1b; 2、找到redis的安装目录下 ##找到redis安装目…

讲一下ZooKeeper的持久化机制?

大家好&#xff0c;我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲一下ZooKeeper的持久化机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候&#xff0c;从单实例、单节点出发&#xff0c;一般有3种架构演进选项&#xff1a;主备高可用&#xff0c;今天我们具体讲讲分布式共识&#xff0c;以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

【Python】第二弹---深入理解编程基础:从常量、变量到注释的全面解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、常量和表达式 2、变量和类型 2.1、变量是什么 2.2、变量的语法 2.3、变量的类型 2.4、动态类型特…

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…

YOLOv10改进,YOLOv10检测头融合RFAConv卷积,添加小目标检测层(四头检测)+CA注意机制,全网首发

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…

解锁C#语法的无限可能:从基础到进阶的编程之旅

目录 一、C# 基础语法 1.1 数据类型 1.2 变量与常量 1.3 运算符 1.4 控制流语句 二、C# 面向对象编程语法 2.1 类与对象 2.2 封装 2.3 继承 2.4 多态 虚方法 抽象类 接口 三、C# 高级语法 3.1 特性&#xff08;Attribute&#xff09; 预定义特性 自定义特性 3…

“AI智能防控识别系统:守护安全的“智慧卫士”

在如今这个科技飞速发展的时代&#xff0c;安全问题始终是大家关注的焦点。无论是企业园区、学校校园&#xff0c;还是居民社区&#xff0c;都希望能有一双“慧眼”时刻守护着&#xff0c;及时发现并防范各种安全隐患。而AI智能防控识别系统&#xff0c;就像一位不知疲倦、精准…

Leetcode 983. 最低票价 动态规划

原题链接&#xff1a;Leetcode 983. 最低票价 class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {int n days.size();int last days[n - 1];int dp[last 1];map<int, int> mp;for (auto x : days)mp[x] 1;dp…

Vue篇-07

Vue UI组件库 一、移动端常用的UI组件库 1.1、Vant 1.2、Cube UI 1.3、Mint UI 二、PC端常用的UI组件库 2.1、Element UI Element - The worlds most popular Vue UI framework 安装&#xff1a; 按需引入&#xff1a; 135_尚硅谷Vue技术_element-ui按需引入_哔哩哔哩_b…

2025.1.15——四、布尔注入

题目来源&#xff1a;ctfhub技能树 目录 一、基本操作&#xff1a;整理已知信息&#xff0c;得到本题为布尔注入 方法一&#xff1a;手工盲注&#xff08;不推荐&#xff09; step 1&#xff1a;判断具体形式 step 2&#xff1a;查询字段数 step 3&#xff1a;通过回显判…

基于SpringBoot的装修公司管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

小游戏前端地区获取

目前前端获取除了太平洋&#xff0c;没有其它的了。 //在JS中都是使用的UTF-8&#xff0c;然而requst请求后显示GBK却是乱码&#xff0c;对传入的GBK字符串&#xff0c;要用数据流接收&#xff0c;responseType: "arraybuffer" tt.request({url: "https://whoi…

Spark 之 Aggregate

Aggregate 参考链接: https://github.com/PZXWHU/SparkSQL-Kernel-Profiling完整的聚合查询的关键字包括 group by、 cube、 grouping sets 和 rollup 4 种 。 分组语句 group by 后面可以是一个或多个分组表达式( groupingExpressions )。 聚合查询还支持 OLAP 场景下的多…

计算机网络 网络层 2

IP协议&#xff1a; Ip数据报的格式&#xff1a; 首部:分为固定部分 和 可变部分 固定部分是20B 版本&#xff1a;表明了是IPV4还是IPV6 首部长度&#xff1a;单位是 4B&#xff0c;表示的范围是&#xff08;5~15&#xff09;*4B 填充&#xff1a;全0&#xff0c;,让首部变…

JAVA-二叉树的四种遍历

目录 一、二叉树的存储 二、二叉树遍历的概念 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 三、概念面试题 四、代码实现 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 五、其他写法(非递归) 1.非递归前序遍历 2.非递归中序遍历 3.非递归后续遍历 一、二叉树…

Spring FactoryBean到仿照mybatis @Mapper的实现

目录 FactoryBean原理FactoryBean例子org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean mybatis mapper bean的手动实现思考复习下Jdbc传统sql查询做法Mapper接口实现思路复习批量注册beanDefinition: ConfigurationClassPostProcessor自定义实现Mapp…

【Go】Go数据类型详解—数组与切片

1. 前言 今天需要学习的是Go语言当中的数组与切片数据类型。很多编程语言当中都有数组这样的数据类型&#xff0c;Go当中的切片类型本质上也是对 数组的引用。但是在了解如何定义使用数组与切片之前&#xff0c;我们需要思考为什么要引入数组这样的数据结构。 1.1 为什么需要…

flutter Get GetMiddleware 中间件不起作用问题

当使用 get: ^5.0.0-release-candidate-9.2.1最新版本时&#xff0c;中间件GetMiddleware各种教程都是让我们在redirect中实现&#xff0c;比如&#xff1a; overrideRouteSettings? redirect(String? route) {return RouteSettings(name: "/companyAuthIndexPage"…

【Idea启动项目报错NegativeArraySizeException】

项目场景&#xff1a; Idea启动项目报错&#xff08;打包不报错&#xff09;&#xff0c;项目在服务器部署运行没有问题&#xff0c;尝试了重启idea、重启电脑、maven clean/install 都不行 maven-resources-production:sample: java.lang.NegativeArraySizeException: -5833…