【笔试常见编程题01】删除公共字符串、组队竞赛、倒置字符串、排序子序列

news2025/1/20 3:40:18

在这里插入图片描述

1. 删除公共字符串

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
输入描述
每个测试输入包含2个字符串
输出描述
输出删除后的字符串
示例 1
输入
They are students.
aeiou
输出
Thy r stdnts.

思路1:

  1. 遍历第二个字符串
  2. 在第一个字符串中找到
    跟第二个字符串相同的字符并逐一删除
int main() {
    string one, two;
    // cin遇到空格读取结束,所以用getline读取字符串里的空格
    getline(cin, one);
    getline(cin, two);
    for (int i = 0; i < two.size(); i++) {
        while (one.find(two[i]) != -1) // find失败返回值为-1
            one.erase(one.find(two[i]), 1);
    }
    cout << one;

    return 0;
}

思路2:

  1. 将第二个字符串的所有字符映射到哈希表
  2. 定义一个string
  3. 遍历第一个字符串
    并在哈希表对应位置查找有无此字符
    该位置为0说明第二个字符串无此字符
    在新定义的string添加该字符即可
int main() {
     string one, two;
     getline(cin, one);
     getline(cin, two);
     int hashtable[256]={0}; // 哈希映射
     for(size_t i = 0; i < two.length(); i++)
     {
         hashtable[two[i]]++; // 将第二个字符串中的字符映射到哈希表
     }
     string s;
     for(size_t i = 0; i < one.length(); i++)
     {
         if(hashtable[one[i]] == 0)
         {
             s += one[i];
         }
     }
     cout << s;
     return 0;
}

2. 组队竞赛

牛牛举办了一次编程比赛,参加比赛的有3n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:
如果牛牛把6个队员划分到两个队伍
如果方案为:
team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10.
输入描述
输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
第二行包括3
n个整数a_i(1 ≤ a_i ≤ 10^9),表示每个参赛选手的水平值.
输出描述
输出一个整数表示所有队伍的水平值总和最大值.
示例 1
输入
2
5 2 8 5 1 5
输出
10

思路1:
用两大带一小的取法
可以保留次大的数据
从而提高队伍水平值
使水平值总和最大化
在这里插入图片描述

  1. 将3n个数据排序
  2. 从n+1个数隔1取1

在这里插入图片描述

int main() {
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(3 * n);
    // 输入3*n个元素放入vector
    for (int i = 0; i < v.size(); i++)
    {
        cin >> v[i];
    }
    // 排序
    sort(v.begin(), v.end());
    // tail指向n的位置每次+=2,front指向n-1的位置每次--
    vector<int> tmp;
    long long max = 0;
    for (int front = n-1, tail = n; tail < v.size(); tail += 2)
    {
        max += v[tail];
    }
    cout << max;

    return 0;
}

3. 倒置字符串

将一句话的单词进行倒置,标点不倒置
比如 “I like beijing.”,经过处理后变为:“beijing. like I”。
字符串长度不超过100。
输入描述
输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。
‘.’ 只出现在最后一个单词的末尾。
输出描述
依次输出倒置之后的字符串,以空格分割。
示例 1
输入
I like beijing.
输出
beijing. like I

思路1:

  1. 遍历字符串找到空格下标
  2. 通过找到的区间构建一个string插入vector
  3. 逆置输出vector
int main() {
    string s;
    getline(cin, s);

    vector<string> v;
    size_t sub = 0;
    for (int i = 0; i < s.size(); i++)
    {
        // 找空格所在下标
        while (s[sub] != ' ' && (s.begin() + sub) != s.end())
        {
            sub++;
        }
        string tmp(s, i, sub-i);
        v.push_back(tmp);
        i = sub;
        sub++;
    }
    
    auto it = v.rbegin();
    while (it != v.rend())
    {
        cout << *it << " ";
        it++;
    }

    return 0;
}

思路2:

  1. 整体逆置
  2. 单词逆置

在这里插入图片描述

int main()
{
    string s;
    getline(cin, s);
    // 整体逆置
    reverse(s.begin(), s.end());

    auto it = s.begin();
    auto blank = s.begin();
    while (it != s.end())
    {
        while (blank != s.end() && *blank != ' ')
        {
            blank++;
        }
        //局部单词逆置
        reverse(it, blank);
        if (blank != s.end())
            blank++;
        it = blank;
    }
    cout << s << endl;
    return 0;
}

思路3:

  1. 只可意会不可言传
    请自行画图理解
int main()
{
    string s1, s2;
    cin >> s1;
    while (cin >> s2)
        s1 = s2  + " " + s1;
    cout << s1 << endl;
    return 0;
}

4. 排序子序列

牛牛定义排序子序列为一个数组中一段连续的子序列,这段子序列是非递增或者非递减排序的。
牛牛有一个长度为 n 的整数数组 a,他现在需要把数组 a 分为若干段排序子序列,牛牛想知道最少可以把这个数组分为几段排序子序列。
输入描述
第一行输入一个正整数 n。
第二行输入 n 个正整数 a_i,表示数组的每个数。
1 <= n <= 10^5
1 <= a_i <= 10 ^ 9
输出描述
输出一个整数,可以将 a 最少划分为多少段排序子序列。
示例 1
输入
6
1 2 3 2 2 1
输出
2
说明
可以把划分为[1,2,3]和[2,2,1]两个排序子序列。

  1. 开始遍历数组,判断后一个数是否大于当前数
    如果大于进入非递减序列
    如果小于或等于进入非递增序列
int main() {
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    int count = 0;
    for (int i = 0; i < v.size(); i++) {
        if (i == v.size() - 1) // 当走到只剩最后一个元素的时候
        {
            count++;
            break;
        }     
        while (i + 1 != v.size() && v[i + 1] == v[i])
        {
            i++; // 刚开始遇到前后一样的元素直接++
            // 因为不知道后面遇到的元素是非递增还是非递减
            continue;
        }
             
        if (v[i + 1] > v[i])
        {
            while (i + 1 != v.size() && v[i + 1] >= v[i])
                i++;
            count++;
            // 此时i指向非递减区间最后一个元素的下标
            continue; // 需要跳出此次循环++到下一个非递增的第一个元素
        }
        if (v[i + 1] < v[i])
        {
            while (i + 1 != v.size() && v[i + 1] <= v[i])
                i++;
            count++;
        }
    }
    cout << count;
    return 0;
}

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

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

相关文章

事务:分布式事务与本地事务的区别

分布式事务章节 分布式事务&#xff1a;2PC与3PC的区别-CSDN博客 分布式事务&#xff1a;X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客 事务简介 事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务是由一组操作构成的可靠的独立的…

【Linux】Linux中的日志查询方法

文章目录 linux日志与日志的查询方法更多journalctl用法journalctl用法案例部分日志路径说明推荐阅读 linux日志与日志的查询方法 在Linux系统中&#xff0c;日志文件用于记录系统的各种运行信息和错误消息。常见的日志文件包括但不限于/var/log/下的各种日志&#xff0c;如me…

foxmail开启不能自动启动解决办法

1、不要以管理员权限启动&#xff0c;不勾选管理员权限。 2、在foxmail设置里勾选“开机自动启动”

微信小程序(二十)Vant组件库的配置

教程很详细&#xff0c;直接上过程 上一篇 官方文档也有&#xff0c;但是因为版本的更新&#xff0c;官方文档并没有跟着改变&#xff0c;这里我写一份最新版能用的教程 &#xff08;口头禅还是不能少的&#x1f923;&#x1f923;&#x1f923;&#xff09; 灵魂拷问&#xf…

增加/调整硬盘空间有效的 8 款管理磁盘分区软件分享

适用于电脑的最佳分区管理器是一个出色的工具&#xff0c;可以增加硬盘空间并确保最有效地管理磁盘分区。因此&#xff0c;请继续阅读以详细了解它们。 电脑上的存储问题并不是什么新鲜事。然而&#xff0c;随着最新 电脑的出现&#xff0c;情况有所改善。但似乎没有足够的空间…

数据监控-Prometheus/Grafana

一、数据监控Prometheus 1、什么是Prometheus Prometheus是由SoundCloud开源监控告警解决方案,从2012年开始编写代码,到2015年github上开源以来,吸引不少用户以及公司的使用。Prometheus作为新一代的开源解决方案,很多理念与Google SRE的运维之道不谋而合。 2、Promet…

如何使用数据恢复软件恢复已删除的文件

在计算机时代之前&#xff0c;数据一直以物理方式存储在纸张上。然后通过收集论文&#xff0c;创建了一个大数据库。收集到的论文存放在大房间或数据收集中心。笔和纸系统的一个很大的缺点是&#xff0c;如果你想找到特定的数据&#xff0c;就像在沙子里找到一根针一样。 计算…

2023 IoTDB Summit:Dr. Feinauer《Apache IoTDB在德国工业和关键基础设施中的应用》

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

幻兽帕鲁的搭建和幻兽帕鲁需要什么配置的服务器

前言 大家好&#xff0c;今天教大家如何快速搭建幻兽帕鲁&#xff0c;并能满足8-32人游玩 第一步 购买服务器 1.CPU&#xff1a;4核&#xff08;最低需要4核起&#xff0c;当然可以选择更高的&#xff09;CPU的选择更看重单核性能&#xff0c;尽量选择主频2.5GHz以上的&#…

goland课程管理(6)

项目目录结构如下图所示&#xff1a; core包下面&#xff1a; class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题&#xff1a;鸿蒙 OS 技术特性是什么? 硬件互助&#xff0c;资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座&#xff0c;为设备之间的互联互通提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地分发…

TCP半链接和全链接队列实验(下)

TCP半链接和全链接队列实验(上)-CSDN博客 实战 - TCP 半连接队列溢出 如何查看 TCP 半连接队列长度&#xff1f; 很遗憾&#xff0c;TCP 半连接队列长度的长度&#xff0c;没有像全连接队列那样可以用 ss 命令查看。 但是我们可以抓住 TCP 半连接的特点&#xff0c;就是服务端…

Linux之进程间通信(system V 共享内存)

目录 一、共享内存 1、基本原理 2、共享内存的创建 3、共享内存的释放 4、共享内存的关联 5、共享内存的去关联 6、查看IPC资源 二、完整通信代码 三、共享内存的特点 四、信号量 1、相关概念 2、信号量概念 进程间通信的本质就是让不同的进程看到同一个资源。而前…

vit细粒度图像分类(四)BT-Net学习笔记

1.摘要 为了改进在细粒度图像分类过程中类别差异难以提取的问题&#xff0c;本文提出了一种基于 Transformer 双线性网络的细粒度网络分类优化方法(BT-Net)。 首先&#xff0c;将输入图像通过不同卷积处理成不同长度的二维向量&#xff0c;然后&#xff0c;构建重复次数不同的…

JVM内存问题排查

本文又名《对JVM一窍不通的我快速开始排查应用内存问题》。主要系统性地整理了排查思路&#xff0c;为大家遇到问题时提供全面的排查流程&#xff0c;不至于漏掉某些可能性误入歧途浪费时间。 基本原则 由于本文的定位是Cookbook,基本原则是让整个流程能够系统化规范化的同时将…

少儿编程:让孩子在数字世界中自由翱翔

在这个信息爆炸的时代&#xff0c;计算机和互联网已经成为我们生活中不可或缺的一部分。从智能手机到智能家居&#xff0c;从网络游戏到在线教育&#xff0c;数字技术已经渗透到我们生活的方方面面。因此&#xff0c;掌握编程技能&#xff0c;就像学习阅读和写作一样&#xff0…

RNN预测下一句文本简单示例

根据句子前半句的内容推理出后半部分的内容&#xff0c;这样的任务可以使用循环的方式来实现。 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种用于处理序列数据的强大神经网络模型。与传统的前馈神经网络不同&#xff0c;RNN能够通过其…

深度推荐模型之DeepFM

一、FM 背景&#xff1a;主要解决大规模稀疏数据下的特征组合遇到的问题&#xff1a;1. 二阶特征参数数据呈指数增长 怎么做的&#xff1a;对每个特征引入大小为k的隐向量&#xff0c;两两特征的权重值通过计算对应特征的隐向量内积 而特征之间计算点积的复杂度原本为 实际应…

橘子学ES实战操作01之集群模式如何实现快照备份

我们知道ES中通过副本在一定意义上实现了数据的备份和高可用。但是我们说万一副本数据丢失了&#xff0c;不小心被rm -f了&#xff0c;你就说逆天不逆天吧&#xff0c;此时要实现数据真正意义上的备份就要使用到快照机制&#xff0c;来把数据持久化备份起来&#xff0c;万一数据…

CAD-autolisp(三)——文件、对话框

目录 一、文件操作1.1 写文件1.2 读文件 二、对话框DCL2.1 初识对话框2.2 常用对话框界面2.2.1 复选框、列表框2.2.2 下拉框2.2.3 文字输入框、单选点框 2.3 Lisp对dcl的驱动2.4 对话框按钮实现拾取2.5 对话框加载图片2.5.1 幻灯片图片制作2.5.1 代码部分 一、文件操作 1.1 写…