刷题经验分享(一)

news2024/11/26 16:50:03

文章目录

  • 删除公共字符:
  • 组队竞赛:

删除公共字符:

第一题:删除公共字符
方法一:
思路:
1.将第二个字符串的字符都映射到一个hashtable数组中,用来判断一个字符在这个字符串。
2. 判断一个字符在第二个字符串,这里可以考虑使用将不在字符添加到一个新字符串,最后返回新字符串。

#include<iostream>
#include<string>
using namespace std;
int main()
{
// 注意这里不能使用cin接收,因为cin遇到空格就结束了。
// oj中IO输入字符串最好使用getline。
string str1,str2;
//cin>>str1;
//cin>>str2;
getline(cin, str1);
getline(cin, str2);
// 使用哈希映射思想先str2统计字符出现的次数
int hashtable[256] = {0};
for(size_t i = 0; i < str2.size(); ++i)
{
hashtable[str2[i]]++;
}
// 遍历str1,str1[i]映射hashtable对应位置为0,则表示这个字符在
// str2中没有出现过,则将他+=到ret。注意这里最好不要str1.erases(i)
// 因为边遍历,边erase,容易出错。
string ret;
for(size_t i = 0; i < str1.size(); ++i)
{
if(hashtable[str1[i]] == 0)
ret += str1[i];
}
cout<<ret<<endl;
return 0;
}

方法二:
思路:
这里我利用C++string类内置函数解题,建立两个string类str1、str2,利用string类特有的find_first_of函数在str1中找到str2中的字符,并返回对应的下标,然后擦除对应位置的字符,然后再从当前位置继续向下查找即可。
在这里插入图片描述
结合返回值找不到的话就返回npos,
在这里插入图片描述
这里的npos类型可以看到是无符号整型的,-1被赋值给无符号整形,那么这里的npos就是一个非常大的数字。
在这里插入图片描述

#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_t

using namespace std;

int main()
{
    string str1;
    getline(cin, str1);

    string str2;
    getline(cin, str2);


    std::size_t found = str1.find_first_of(str2);
    while (found != string::npos)
    {
        str1.erase(found, 1);
        found = str1.find_first_of(str2, found);//注意细节
    }

    cout << str1;
    return 0;
}

方法三:
思路:
为了尽量不使用erase函数,这样效率太低,因为每次删除都伴随数据挪动,所以每次把找到的位置替换成 *,然后再创建一个string类对象,依次遍历把不是 * 的尾插到这个string类对象中即可。

#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_t

using namespace std;

int main()
{
    string str;
    getline(cin, str);

    string sur;
    getline(cin, sur);


    std::size_t found = str.find_first_of(sur);
    while (found != string::npos)
    {
        str[found] = '*';
        found = str.find_first_of(sur, found + 1);
    }
    
    int num = 0;
    sur.reserve(str.size()+1);

    sur.clear();
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] != '*')
        {
            sur += str[i];
        }
        
    }
    
    cout << sur << endl;


    return 0;
}

组队竞赛:

第二题:组队竞赛
思路:
队伍的水平值等于该队伍队员中第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。所以实际值把最大值放到最右边,最小是放到最左边。
【解题思路】:
本题的主要思路是贪心算法,贪心算法其实很简单,就是每次选值时都选当前能看到的局部最优解,所以这里的贪心就是保证每组的第二个值取到能选择的最大值就可以,我们每次尽量取最大,但是最大的数不可能是中位数,所以退而求其次,取每组中第二大的。

举例说明:
现在排序后有 1 2 5 5 8 9 ,那么分组为1 8 9 和 2 5 5,8和5都是我们尽最大可能所排的中位数最大值了。
现在排序后有 1 2 3 4 5 6 7 8 9,那么分组为1 8 9和2 6 7和3 4 5,其中8、6、4都是我们尽最大可能所排的中位数最大值了。

从上面的例子来看:那其实就是先对所给数组进行排序,然后从倒数第二个数,倒的数n次,把数到的数加起来就是最后答案。

#include<iostream>
#include<vector>
#include <algorithm> 
using namespace std;
int main()
{
	long long num = 0;//题目数值类型比较大
	cin >> num;

	vector<long long> arr;
	arr.resize(num * 3);
	for (int i = 0; i < num * 3; i++)
	{
		cin >> arr[i];
	}
	sort(arr.begin(), arr.end());

	long long sum = 0, temp = arr.size() - 2;
	while (num)
	{
		sum += arr[temp];
		temp -= 2;
		num--;
	}
	cout << sum;
	return 0;
}

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

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

相关文章

140.深度学习分布式计算框架-3

140.1 Horovod Horovod是 Uber 开源的又一个深度学习工具&#xff0c;它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点&#xff0c;可为用户实现分布式训练提供帮助。Horovod 支持通过用于高性能并行计算的低层次接口 – 消息传递接口 (MPI…

Vue脚手架环境中简单使用MarkDown(只入门)

目录 入门 高级使用 入门 1 所在终端输入 npm install vue-meditor 2 复制以下代码 先新建一个组件 <template><div><MavonEditor v-model"myMarkDownData"/><button click"submit">提交</button></div> </te…

vue配置

首先安装node.js 在cmd node -v查看 然后 cmd命令行执行 : npm install -g vue/cli // 加-g是安装到全局 安装vue cli 安装vue cli 1 看一下 这是在cmd输入的内容,参考第一条链接 在vscode中怎么配置他? 文件-打开文件夹,选择一个文件夹 这里是firstvue 在下面新建文件夹…

可变长子网划分

目录 IP地址 子网划分 可变长子网划分 IP地址 在学习子网划分之前应该先清楚什么是IP地址和IP地址的类型 IP 地址的格式0网络地址主机地址10网络地址 主机地址 110网络地址主机地址1110组播地址11110保留 A 1.0.0.0~127.255.255.255 B 128.0.0.0~191.255.255…

C++编程进阶

目录 new运算符 new关键字的使用案例 C的引用 C中引用案例 引用的注意事项 引用做函数参数 引用做函数的返回值 前言&#xff1a; 具体案例 引用的本质 常量引用 常量引用原理 经典案例 函数的提高 函数的默认参数 注意&#xff1a; 具体案例 函数的占位参数…

已解决:树莓派外接硬盘 usb 或者sata 导致wifi无法链接 无线网卡无法使用问题

我的环境是树莓派4b 买了一个有硬盘的盒子 看上图的连接方式&#xff0c;是占用了树莓派的一个usb3.1进行了sata的转接&#xff0c;实现挂载硬盘。 但是我发现&#xff0c;安装系统开机之后&#xff0c;可以看到有硬盘接入&#xff0c;但是无法连wifi&#xff0c;如果拔掉硬盘…

G. SlavicG‘s Favorite Problem(树的遍历DFS,BFS均可)

Problem - G - Codeforces 给你一棵有n个顶点的加权树。回顾一下&#xff0c;树是一个没有任何循环的连接图。加权树是一棵树&#xff0c;其中每条边都有一定的权重。这棵树是无定向的&#xff0c;它没有根。 由于树让你感到厌烦&#xff0c;你决定挑战自己&#xff0c;在给定…

java--Lambda (3)变量的访问与修改

文章目录0 写在前面1 可以直接在 Lambda 表达式中访问外层的局部变量2 在 Lambda 表达式当中被引用的变量的值不可以被更改3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量4 写在最后0 写在前面 学习使用在Lambda表达式&#xff0c;有些地方访问一些变…

VM系列振弦读数模块采集测量数据的一般步骤

VM 模块是通用型单振弦式传感器测量模块&#xff0c;主要功能是测量频率的传感器内置的温度传感器&#xff0c;使用默认工作参数即可自动测读绝大多数振弦传感器。 但由于传感器类型、结构、厂家、钢弦材料、线圈等影响因素不同&#xff0c;导致使用 VM 模块测量某些传感器时需…

【408专项篇】C语言笔记-第六章(指针)

文章目录第一节&#xff1a;指针的本质1. 指针的定义2. 取地址操作符与取值操作符第二节&#xff1a;指针的传递1. 指针的传递第三节&#xff1a;指针的偏移1. 指针的偏移2. 指针与一维数组第四节&#xff1a;动态指针与内存申请1. 指针与动态内存申请2. 堆空间和栈空间的差异第…

电脑无线网卡连接的无线信号不好的,经常丢包,掉线断网如何优化解决

环境&#xff1a; 电脑&#xff1a;HP480G7 系统:Win10 专业版 无线网卡&#xff1a;水星ud6s 、TP-LINK等 AP&#xff1a;锐捷RAP2200(E) 组网模式&#xff1a;AP代管AP模式 问题描述&#xff1a; 电脑无线网卡连接的无线信号不好的&#xff0c;经常断网&#xff0c;因…

docker logs命令详解

docker 命令官档如下&#xff1a; https://docs.docker.com/engine/reference/commandline/docker/ docker logs官档如下 https://docs.docker.com/engine/reference/commandline/logs/#retrieve-logs-until-a-specific-point-in-time 一、常用命令 1. 可以查看命令用法 doc…

英国访问学者|签证申请详细步骤简述

英国访问学者签证流程是怎么样的&#xff1f;下面就随知识人网老师一起来看一看英国访问学者签证申请详细步骤简述。 第1步&#xff1a;英国签证申请中心只接受在线填写的申请表&#xff0c;不接受手写表格。请访问官网完整填写申请表。(必须使用英文大写填写) 第2步&#xff…

数据库系统 整体结构化 的理解

数据库系统实现整体数据的结构化&#xff0c;这是数据库的主要特征之一&#xff0c;也是数据库系统与文件系统的本质区别。 在文件系统中&#xff0c;文件中的记录内部具有结构&#xff0c;但是记录的结构和记录之间的联系被固化在程序中&#xff0c;需要由程序员加以维…

jenkins配置maven+git自动构建jar包

进入页面 安装maven插件 需要使用maven插件构建项目,所以安装maven插件 步骤如下图&#xff1a; 点击安装后跳转至安装页面&#xff0c;等待在线安装完成即可 安装完成配置当前服务器中安装的maven 下滑到最下面点击新增maven 配置完成点击应用完成 配置当前服务器中安装的gi…

ADB 命令结合 Monkey 的使用

1、什么是monkey Monkey 是Android SDK提供的一个命令行工具&#xff0c;可以简单方便的发送伪随机的用户事件流&#xff0c;对Android APP做压力&#xff08;稳定性&#xff09;测试。主要是为了测试app是否存在无响应和崩溃的情况。 2、adb结合 monkey 的常用命令 adb shel…

如何选择跨平台桌面应用开发框架

受益于开源技术的发展&#xff0c;以及响应快速开发的实际业务需求&#xff0c;跨平台开发不仅限于移动端跨平台&#xff0c;桌面端虽然在市场应用方面场景不像移动端那么丰富&#xff0c;但也有市场的需求。 相对于个人开发者而言&#xff0c;跨平台框架的使用&#xff0c;主…

干货!一次伪静态页面的SQL注入!白帽黑客实战 。

涉及技能点 SQL注入基础原理 盲注常用函数及思路 burpsuite基础知识 过程记录 1.发现 在翻阅一EDU站点时&#xff0c;发现路径中带有明显的数字参数 好像与我们平时习惯的xxx.php?id不同呃 2.尝试注入 按照以往习惯&#xff0c;先用order by探探底&#xff0c;结果翻车了…

SPARKSQL3.0-PhysicalPlan物理阶段源码剖析

一、前言 阅读本节需要先掌握【SPARKSQL3.0-Optimizer阶段源码剖析】 本质&#xff1a;物理计划阶段将optimizer阶段优化后的逻辑算子树【LogicalPlan】进行进一步转换&#xff0c;生成物理算子树【SparkPlan】&#xff0c;物理算子树的节点可以直接生成 RDD 或对 RDD 进行 t…

javaweb 使用element + vue 完善项目 servlet 优化

我们先定义一个BaseServlet,继承HttpServlet 重写Service方法 &#xff08;因为HttpServlet就是在Service方法里做的通过请求方式进行方法分发&#xff0c;我们就重写改成通过请求路径分发&#xff09; 根据资源路径进行方法分发&#xff0c;利用反射得到调用者的class字节码文…