【C++】刷题强训(day13)--牛牛冲钻五、最长无重复字数组、重排字符串

news2024/12/23 17:17:13

目录

1、牛牛冲钻五

1. 题目

1.2 思路

1.3 代码实现

2、最长无重复子数组

2.1 题目

2.2 思路

2.3 程序实现

 3、重排字符串

3.1 题目

3.2 思路

3.3 代码实现


刷题汇总:传送门!

1、牛牛冲钻五

1. 题目

1.2 思路

由题可知,赢一局则得一颗星,输一局扣一颗星,连胜三局则会触发连胜机制,获得额外 的k颗星,最终输出得了多少星星。本题按照题目模拟实现即可。

1.3 代码实现

#include <iostream>
 using namespace std;
 
int main() {
    int T = 0;
    cin >> T;
    while(T--)
    {
        int n = 0,k =0;
        cin >> n >> k;
        string s;
        cin >> s;
        int ret = 0;
        for(int i=0;i < n;i++)
        {
            if(s[i] == 'L')
                ret--;
            else if(i-1>=0 && i-2>=0 && s[i-1] == 'W' && s[i-2] == 'W')
                ret +=k;
            else
                ret++;
        }
        cout << ret << endl;
 
    }
    return 0;
 }

2、最长无重复子数组

2.1 题目

2.2 思路

由题可知,要求求一个长度为n的数组中最长无重复元素的子数组 的长度,其中注意:该子数组中元素全不相同,并且位置是连续的,但是与值的大小无关。这里可以使用滑动窗口的思路来解决。

  1. 进窗口:利用哈希表统计当前字符个数
  2. 判断:遍历到字符串,判断字符是否已经出现过;如果出现两次,则计数为2,并出窗口
  3. 出窗口:将左指针位置的元素出窗口,向右移动
  4. 更新结果:一次循环结束后,判断最大长度即可。

2.3 程序实现

class Solution {
public:
    int hash[100001];
    int maxLength(vector<int>& arr)
    {
        int n = arr.size();
        int left = 0,right = 0,ret =0;
        for(;right < n;right++)
        {
            hash[arr[right]]++;
            while(hash[arr[right]] > 1)
            {
                hash[arr[left]]--;
                left++;
            }
            ret = max(ret,right-left+1);
        }
       return ret;
    }
};

 3、重排字符串

3.1 题目

3.2 思路

读完题,知道让处理一组由小写字母组成的字符串,进行重排,使得重排后,相邻字母不相同。如果能成功重排,则输出"yes"和重排后的字符串,否则输出"no"。

那么,根据题目内容,需要推导重排字符之间的关系,比如位置关系、数量关系,比如以a、a、b、b、c、c、c7个字符为例,使得满足重排,那么放置a后可以放b或c,第二个位置放置b后,可以放置a或c,如果此时再放a,那么之后放b或继续放置b,那么就是abab之后随便放c都会失败,所以推导出,存在多个字符时,以一定的顺序C.依次放入,则acbacbc这样就能满足重排,输出“yes”然后数量关系,如果其中一个字符c数量大于整个字符串的一半时,a,a,b,b,c,c,c,c,c,c,c,c这种情况也会导致失败,直接输出"no"即可,所以能否重排受最多元素的数量影响。

那么,就可以先处理字符多的字母先放置,其余字符按照一定的次序放置即可。既然如此,进一步分析,就可以将同一组相同字符错位放置,所以综上所述,主要分为以下几个步骤:
(1)、每次循环处理同一批相同字符
(2)、优先处理出现次数最多的字符,
(3)、每一次放置都错位放置,即隔一个奇数位置放置:(4)、对于是否能重排的处理(max)c<=(n+1)/2,则能重排;否则不满足重排。

3.3 代码实现

#include <iostream>
using namespace std;
const int N = 100010;
int n;
char str[N];
char ret[N];
int main()
{
    cin >> n >> str;
    int hash[26] = { 0 }; // 统计每个字符的频次 
    int maxIndex, maxCount = 0;
    for(int i = 0; i < n; i++)
    {
        if(maxCount < ++hash[str[i] - 'a'])
         {
             maxCount = hash[str[i] - 'a'];
             maxIndex = str[i] - 'a';
         }
    }
    if(maxCount > (n + 1) / 2)
        cout << "no" << endl;
    else
    {
        cout << "yes" << endl;
         int index = 0;
         // 先去摆放出现次数最多的 
         while(maxCount--)
         {
             ret[index] = maxIndex + 'a';
             index += 2;
         }
         // 处理剩下的 
         for(int i = 0; i < 26; i++)
         {
             if(hash[i] && i != maxIndex)
             {
                 while(hash[i]--)
                 {
                     if(index >= n) 
                         index = 1;
                     ret[index] = i + 'a';
                     index += 2;
                }
            }  
         } 
     }
     // 打印结果 
     for(int i = 0; i < n; i++) 
     	cout << ret[i];
     cout << endl;
    return 0;
}


本篇完,下篇见!

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

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

相关文章

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

在做题中学习(78):数组中第K个最大元素

解法&#xff1a;快速选择算法 说明&#xff1a;堆排序也是经典解决topK问题的算法&#xff0c;但时间复杂度为&#xff1a;O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章&#xff0c;分别学习&#xff1a;数组分三块&#xff0c;随机选择基准…

学习记录,正则表达式, 隐式转换

正则表达式 \\&#xff1a;表示正则表达式 W: 表示一个非字&#xff08;不是一个字&#xff0c;例如&#xff1a;空格&#xff0c;逗号&#xff0c;句号&#xff09; W: 多个非字 基本组成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正则表达式中&#xff0c;大…

加载内核映像文件

将kernel转换成elf文件格式&#xff0c;不能直接从loader直接跳转到0x100000&#xff0c;需要解析&#xff0c;提取出代码和数据出来&#xff0c;放到0x10000&#xff08;64kb&#xff09;的位置&#xff0c;1M的位置只是存放elf文件的位置。 4.10加载内核映像文件2 common/el…

11.27-12.5谷粒商城

目录 新增商品 1.上线会员服务 2. 获取分类关联的品牌 3.获取选定分类下的属性分组和属性 4.新增商品vo 5.保存商品信息 6.Spu检索 7.Sku商品检索 新增商品 1.上线会员服务 将会员服务注册到nacos注册中心&#xff0c;启用服务注册发现EnableDiscoveryClient。 同时新增…

【硬件接口】UART接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、UART接口概要 UART接口&#xff0c;即通用异步接收器/发送器&#xff0c;是一种常用的串行通信协议&#xff0c;广泛应用…

python | print() 函数常被忽略的几点用法

在 python 编程中&#xff0c;print() 是最为基础和常用的函数。 也正因如此&#xff0c;print() 函数的一些基础用法常常被我们初学者所忽略&#xff0c;典型的有&#xff1a;换行问题、间隔符使用及格式化输出等。 一、print() 换行问题 1、默认情况下&#xff0c;每一个 …

VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解

1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种&#xff0c;分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别&#xff0c;所以直接使用英文名词表示)&#xff0c;此外还有两种表示坐标点的方式&#…

MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作

目录 第一章 以问题导入的方式&#xff0c;深入掌握原理基础 第二章 常用数据检索与R语言自动化下载及可视化方法 第三章 R语言数据清洗与特征变量筛选 第四章 基于ArcGIS、R数据处理与进阶 第五章 基于Maxent的物种分布建模与预测 第六章 基于R语言的模型参数优化 第七…

【JavaEE 进阶(一)】SpringBoot(上)

博主主页: 33的博客 文章专栏分类:JavaEE ??我的代码仓库: 33的代码仓库?? ???关注我带你了解更多进阶知识 目录 1.前言2.Spring3.第一个SpringBoot程序4.Spring MVC 4.1建立连接 4.1.1RequestMapping使用 4.2请求 4.2.1传递单个参数4.2.2传递多个参数4.2.3传递一个对象…

银行项目网上支付接口调用测试实例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 公司最近有一个网站商城项目要开始开发了&#xff0c;这几天老板和几个同事一起开着需求会议&#xff0c;讨论了接下来的业务规划和需求策略&#xff0c;等技术需求…

手机LCD分区刷新技术介绍

分区刷新也称为分区变频&#xff0c;LCD分区刷新功能的目的是将屏幕分为上下半区&#xff0c;分区显示不同帧率&#xff0c;上方区块High Frame Rate&#xff0c;下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上&#xff0c;显示…

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面

前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中&#xff0c;命令行使用还是不太方便的&#xff0c;因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…

flask创建templates目录存放html文件

首先&#xff0c;创建flask项目&#xff0c;在pycharm中File --> New Project&#xff0c;选择Flask项目。 然后&#xff0c;在某一目录下&#xff0c;新建名为templates的文件夹&#xff0c;这时会是一个普通的文件夹。 然后右击templates文件夹&#xff0c;选择Unmark as …

python编程Day12-属性和方法的分类

私有和公有 在python中 定义类的时候&#xff0c;可以给 属性和方法设置 访问权限&#xff0c;即规定在什么地方可以使用。 权限一般分为两种&#xff1a;公有权限、私有权限 公有权限 定义&#xff1a;直接定义的属性和方法就是公有的特点&#xff1a; 可以在任何地方访问和使…

Moving Tables

任务内容 Description The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a pla…

小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记 目录 美食列表 功能描述 准备工作 创建项目 配置页面 配置导航栏 启动本地服务器 页面初始数据 设置获取美食数据 设置onload函数 设置项目配置 页面渲染 页面样式 处理电话格式 创建处理电话格式脚本 页面引入脚本 …

Facebook广告文案流量秘诀

Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密&#xff01; 一、广告文案怎么写&#xff1f; 正文&#xff1a;这是帖子的正文&#xff0c;出现在您姓名的正下方。它可…

TEXT2SQL工具vanna本地化安装和应用

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…

标书里的“废标雷区”:你踩过几个?

在投标领域&#xff0c;标书的质量不仅决定了中标的可能性&#xff0c;更是体现企业专业度的关键。但即便是经验丰富的投标人&#xff0c;也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中&#xff0c;也可能是投标文件格式的规范问题。以下&…