字节青训-字符串字符类型排序问题、小C点菜问题

目录

一、字符串字符类型排序问题

题目

样例

输入:

输出:

输入:

输出:

输入:

输出:

解题思路: 

问题理解

数据结构选择

算法步骤

最终代码:

运行结果:

​编辑 

二、小C点菜问题

问题描述

测试样例

解题思路: 

 

问题理解

数据结构选择

算法步骤

最终代码:

运行结果:

​编辑 

 

 


一、字符串字符类型排序问题

题目

给定一个字符串,其中仅包含,大小写字母,数字和问号。要求对该字符串内部字符排序,满足以下要求:

  1. 问号的占用的位置不变
  2. 数字占用的位置不变,数字之间由大到小排序
  3. 字母占用的位置不变,字母之间按字典序排序

具体请配合样例理解

样例

输入:

12A?zc

输出:

21A?cz

输入:

1Ad?z?t24

输出:

4Ad?t?z21

输入:

???123??zxy?

输出:

???321??xyz?

解题思路: 

问题理解

我们需要对给定的字符串进行排序,但有以下特殊要求:

  1. 问号的位置保持不变
  2. 数字的位置保持不变,但数字之间按从大到小排序
  3. 字母的位置保持不变,但字母之间按字典序排序

数据结构选择

  1. 问号的位置:我们可以通过遍历字符串,记录问号的位置。
  2. 数字和字母的排序:我们可以分别提取出数字和字母,进行排序,然后再放回原位置。

算法步骤

  1. 记录问号的位置:遍历字符串,记录问号的位置。
  2. 提取数字和字母:遍历字符串,提取出所有的数字和字母。
  3. 排序:对提取出的数字按从大到小排序,对提取出的字母按字典序排序。
  4. 重组字符串:根据记录的问号位置和排序后的数字、字母,重组字符串。

最终代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;string solution(string inp) {// 记录问号的位置vector<int> questionMarks;for (int i = 0; i < inp.size(); ++i) {if (inp[i] == '?') {questionMarks.push_back(i);}}// 提取数字和字母vector<char> digits;vector<char> letters;for (char c : inp) {if (isdigit(c)) {digits.push_back(c);} else if (isalpha(c)) {letters.push_back(c);}}// 排序sort(digits.begin(), digits.end(), greater<char>());sort(letters.begin(), letters.end());// 重组字符串string result = inp;int digitIndex = 0;int letterIndex = 0;for (int i = 0; i < result.size(); ++i) {if (result[i] == '?') continue;if (isdigit(result[i])) {result[i] = digits[digitIndex++];} else if (isalpha(result[i])) {result[i] = letters[letterIndex++];}}return result;
}int main() {// Add your test cases herecout << (solution("12A?zc") == "21A?cz") << endl;cout << (solution("1Ad?z?t24") == "4Ad?t?z21") << endl;cout << (solution("???123??zxy?") == "???321??xyz?") << endl;return 0;
}

运行结果:

二、小C点菜问题

问题描述

小C来到了一家餐馆,准备点一些菜。

已知该餐馆有 nn 道菜,第 ii 道菜的售价为 wiwi​。

小C准备点一些价格相同的菜,但小C不会点单价超过 mm 的菜。

小C想知道,自己最多可以点多少道菜?


测试样例

样例1:

输入:m = 6, w = [2, 3, 3, 6, 6, 6, 9, 9, 23]
输出:3

样例2:

输入:m = 4, w = [1, 2, 4, 4, 4]

解题思路: 

问题理解

小C想要点一些价格相同的菜,并且这些菜的价格不能超过给定的上限 m。我们需要找出在满足这个条件下,小C最多可以点多少道菜。

数据结构选择

我们可以使用一个数组来存储每道菜的价格。为了快速统计每种价格的菜的数量,我们可以使用一个哈希表(在C++中可以使用 std::unordered_map)来记录每种价格的菜的数量。

算法步骤

  1. 遍历价格数组:统计每种价格的菜的数量,并将结果存储在哈希表中。
  2. 筛选价格:遍历哈希表,只考虑价格不超过 m 的菜。
  3. 找出最大数量:在筛选后的价格中,找出数量最多的那个,即为小C最多可以点的菜的数量。

最终代码:

#include <bits/stdc++.h>using namespace std;long solution(int m, const std::vector<int> w) {// 1. 统计每种价格的菜的数量std::unordered_map<int, int> priceCount;for (int price : w) {if (price <= m) {priceCount[price]++;}}// 2. 找出数量最多的菜int maxCount = 0;for (const auto& pair : priceCount) {if (pair.second > maxCount) {maxCount = pair.second;}}return maxCount;
}
int main() {std::cout << (solution(6, {2, 3, 3, 6, 6, 6, 9, 9, 23}) == 3) << std::endl;std::cout << (solution(4, {1, 2, 4, 4, 4}) == 3) << std::endl;std::cout << (solution(5, {5, 5, 5, 5, 6, 7, 8}) == 4) << std::endl;return 0;
}

运行结果:

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

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

相关文章

ES数据迁移方式

elasticdump 需要安装elasticdump &#xff0c;node插件 #!/bin/bashindexes("index1" "index2")for index in "${indexes[]}" doecho "backup ${index} start"#--type: 迁移类型&#xff0c;默认为 data&#xff0c;表明只迁移数据…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

任务调度工具Spring Test

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a; 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 一.…

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…

.NET 9 中 IFormFile 的详细使用讲解

在.NET应用程序中&#xff0c;处理文件上传是一个常见的需求。.NET 9 提供了 IFormFile 接口&#xff0c;它可以帮助我们轻松地处理来自客户端的文件上传。以下是 IFormFile 的详细使用讲解。 IFormFile 接口简介 IFormFile 是一个表示上传文件的接口&#xff0c;它提供了以下…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

数据结构(单向链表——c语言实现)

链式存储的优缺点&#xff1a; 优点&#xff1a; 1、动态分配内存&#xff1a; 链式存储不需要在数据插入之前分配固定大小的数组或内存块&#xff0c;因此它更适合存储动态变化的数据 2、高效的插入和删除操作&#xff1a; 在链表中插入或删除元素只需要调整相邻节点的指…

基于Spring Boot的电子商务平台架构

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架&#xff0c;并且可以不需要配置任何的XML文件就可以&#xff0c;因为Spring Boot里面自带了很多接口&#xff0c;只需要配置不同的接口就会自动的应用并且识别需要的依赖&#xff0c;在配置方面非…

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…

Level DB --- Block

class Block class Block是Level DB里面的重要数据结构&#xff0c;该数据结构用来承载已经存储到文件中的数据。已经被存储的数据当需要再次加载、应用&#xff08;例如搜索&#xff09;&#xff0c;这时首先要把数据加载、初始化到class Block里面。 数据的组织形式&#x…

梯度下降和梯度上升的区别

目录 梯度下降梯度上升总结 梯度下降 定义和目的&#xff1a; 梯度下降是一种优化算法&#xff0c;用于最小化一个目标函数 J ( θ ) J(\theta) J(θ)。常用于监督学习&#xff0c;表示模型预测和实际结果之间的误差。梯度下降的目的是找到使损失函数最小化的参数 θ \theta…

记录大学Linux运维上机考试题目和流程

备注&#xff1a;今年的Linux操作系统考试已经全部结束&#xff0c;仅作为一个记录和留念 前提&#xff1a;配置环回网卡和环境和nat网卡 1、搭建dns服务器 2、Apache和http服务 3、搭建postfix邮件服务器实现邮件发送 4、搭建vsftpdFTP服务器实现文件上传 题目如下&…

前端面试笔试(四)

目录 一、数据结构算法等综合篇 1.线性探查法解决哈希冲突 2.请求分页系统中文件区和对换区 3.RADIUS认证协议&#xff0c;运行在哪个网络协议上 二、代码输出篇 1.res[1,2,100].map(parseInt) 如果我们想要输出为[1,2,100]&#xff0c;可以&#xff1a; 还可以换map里…

Qt问题:不同文件中相同命名空间的多个 Q_NAMESPACE

我在同一namespace中定义了2个enum&#xff0c;定义如下&#xff1a; a.h // // Created by qiaowei on 2024/11/15. //#ifndef ELECTRICITY_MONTHS_ENUM_H #define ELECTRICITY_MONTHS_ENUM_H#include <QMetaObject>namespace data {Q_NAMESPACEenum class Months_enu…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来&#xff0c;安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…

linux进程、文件常见命令

文章目录 进程相关命令日志相关命令 进程相关命令 在Linux系统中&#xff0c;有多个命令可以用来管理和监控进程。以下是一些常用的进程相关命令&#xff1a; ps&#xff1a;查看当前运行的进程。 ps aux&#xff1a;显示所有运行中的进程。ps -ef&#xff1a;显示所有进程的…

Django中的URL配置与动态参数传递(多种方法比较)

Django中的URL配置与动态参数传递(多种方法比较) 目录 ✨ 基础URL配置与re_path()的解读&#x1f527; path()与re_path()的对比分析&#x1f680; 动态参数处理方案详解&#x1f4d8; 正则表达式匹配的优势与劣势&#x1f9e9; 利用path()进行路径参数处理的实现与优劣&…

OpenSIP2.4.11 向 FreeSWITCH 注册

应朋友要求做了个简单的测试&#xff0c;花费时间不过半小时&#xff0c;记录如下&#xff1a; OpenSIPS IP 地址&#xff1a;192.168.31.213 FreeSWITCH IP 地址&#xff1a;192.168.31.166 加载 uac_registrant 模块&#xff08;这个模块依赖 uac_auth 模块&#xff0c;得…