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

在这里插入图片描述

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二 1. 将任何静态图表转换为动态数据可视化 ChatGPT Vision 不仅可以将涂鸦变成功能齐全的 Streamlit 应用程序&#xff0c;还…

Python算法题集_无重复字符的最长子串

本文为Python算法题集之一的代码示例 题目3&#xff1a;无重复字符的最长子串 说明&#xff1a;给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "a…

LeNet跟LeNet5详解

1 LeNet结构 主要是为了手写数字识别 具体结构讲解&#xff1a;从图中例子可得 1 先传入一个灰度图像尺寸为1x28x28&#xff0c;通道数为1&#xff0c;尺寸为28x28的灰度图像 2 第一层5x5卷积&#xff0c;经过公式 输入图像尺寸-卷积核尺寸2padding/步长1&#xff0c;&#…

打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码

大家好&#xff0c;今天用SpringBoot、vue写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 &#xff0c;包含前端和后端&#xff0c;可以直接运行 使用本技术实现的项目&#xff1a;aicnn.cn&#xff0c;欢迎大家体验 如果文章知识点有错误的地方&#xf…

Visio绘图文件阅读器 --- VSD Viewer

VSD Viewer是一款轻量级、直观易用的软件&#xff0c;专门设计用于查看和打印Microsoft Visio绘图文件。它支持多种Visio文件格式&#xff0c;如VSD、VSDX等&#xff0c;并能够快速加载Visio绘图文件&#xff0c;无需等待太长时间。VSD Viewer还提供高质量的打印功能&#xff0…

【目标跟踪】多相机环视跟踪

文章目录 一、前言二、流程图三、实现原理3.1、初始化3.2、输入3.3、初始航迹3.4、航迹预测3.5、航迹匹配3.6、输出结果 四、c 代码五、总结 一、前言 多相机目标跟踪主要是为了实现 360 度跟踪。单相机检测存在左右后的盲区视野。在智能驾驶领域&#xff0c;要想靠相机实现无…

Ps:根据 HSB 调色(以可选颜色命令为例)

在数字色彩中&#xff0c;RGB 和 HSV&#xff08;又称 HSB&#xff09;是两种常用的颜色表示方式&#xff08;颜色模型&#xff09;。 在 RGB 颜色模式下&#xff0c;Photoshop 的红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff09;、蓝&#xff08;Blue&#xf…

空气质量预测 | Python实现基于线性回归、Lasso回归、岭回归、决策树回归的空气质量预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 对于空气质量预测,…

SpringBoot将第三方的jar中的bean对象自动注入到ioc容器中

新建一个模块&#xff0c;做自动配置 config&#xff1a;需要准备两个类&#xff0c;一个自动配置类&#xff0c;一个配置类 CommonAutoConfig&#xff1a;此类用于做自动配置类它会去读取resoutces下的META-INF.spring下的org.springframework.boot.autoconfigure.AutoConfig…

EDEM仿真导入stl文件慢的原因

我在将solidworks导出为STL文件后&#xff0c;再导入EDEM软件进行离散元仿真时&#xff0c;导入速度特别慢&#xff0c;发现是因为stl文件分辨率设置的过于精细&#xff0c;将文件分辨率设置为粗糙后&#xff0c;导入速度就快了。

SSH客户端 Termius for Mac 中文激活版

Termius for Mac是一款强大的终端和SSH客户端&#xff0c;为开发人员、系统管理员和网络工程师提供了全面的远程访问和管理工具。 软件下载&#xff1a;Termius for Mac 中文激活版下载 无论您是在使用Mac、Windows还是Linux系统&#xff0c;Termius都能提供出色的功能和用户体…

一、计算机组成与体系结构【7分】

一、课程内容 二、分值 三、数据表示 1、进制转换 其他进制转换为十进制 十进制转换为其他进制 二进制转换为八进制与十六进制 2、码制 这一块目前不是很懂 3、浮点数表示 4、算数与逻辑运算 四、校验码 1、奇偶校验码&#xff08;只能检测出奇位的错误&#xff0c;…

mac上搭建hbase伪集群

1. 前言 之前我们已经搭建过了 hbase单点环境&#xff0c;(单机版搭建参见&#xff1a; https://blog.csdn.net/a15835774652/article/details/135569456) 但是 为了模拟一把集群环境 我们还是尝试搭建一个伪集群版 2. 环境准备 jdk环境 1.8hdfs &#xff08;hadoop环境 可选…

如何保证缓存与数据库双写时的数据一致性?

背景&#xff1a;使用到缓存&#xff0c;无论是本地内存做缓存还是使用 Redis 做缓存&#xff0c;那么就会存在数据同步的问题&#xff0c;因为配置信息缓存在内存中&#xff0c;而内存时无法感知到数据在数据库的修改。这样就会造成数据库中的数据与缓存中数据不一致的问题。 …

使用py-spy对python程序进行性能诊断学习

py-spy简介 py-spy是一个用Rust编写的轻量级Python分析工具&#xff0c;它能够监视正在运行的Python程序&#xff0c;而不需要修改代码或者重新启动程序。Py-spy可以在不影响程序运行的情况下&#xff0c;采集程序运行时的信息&#xff0c;生成火焰图&#xff08;flame graph&…

MYSQL表的约束详解!

文章目录 前言一、空属性二、默认值三、列描述四、zerofill五、主键六、自增长七、唯一键八、外键 前言 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据…

【CANoe使用大全】——Logging窗口

&#x1f64b;‍♂️【CANoe使用大全】系列&#x1f481;‍♂️点击跳转 文章目录 1.概述2.Logging窗口打开方式3.创建Logging4.配置4.1. 命名4.2.格式选择4.3. 路径选择与命名4.3.1.Logging文件命名_自定义4.3.2.Logging文件命名_系统内选择 5.Logging触发方式5.1 Logging模块…

QT实现USB摄像头接入显示

一、UVC协议简介 UVC全称是USB Video Class&#xff08;USB视频类&#xff09;&#xff0c;是一种标准化的USB视频设备通信协议&#xff0c;它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现&#xff0c;解决了摄像头厂商之间互不兼容&#xff0c;以及摄像头应…

win10通过ssh链接deepin23并开启x11转发

前提 主机环境&#xff1a;win10 lstc 虚拟机环境&#xff1a;deepin23beta2 终端&#xff1a;tabby x11服务器: vcxsrv 安装ssh sudo apt install ssh开启root登录(看你需求&#xff09; 首先你要给root账号设置密码 sudo passwd root修改配置文件 sudo vim /etc/ssh/ss…

MongoDB本地部署并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 4. 结语 前言 MongoDB是一个基于分布式文件…