排序子序列,倒置字符串讲解(图文并茂)

目录

1.排序子序列

2.倒置字符串


1.排序子序列

排序子序列_牛客笔试题_牛客网 (nowcoder.com)

首先题干中提到非递增序列和非递减序列,那么我们就要先弄明白什么是上述2种序列:

非递增序列:a[i] >= a[i+1]

如:3 2 1 或者 3 3 2 2 1

非递减序列:a[i] <= a[i+1]

如:1 2 3 或者 1 2 2 3

分析:那么如何划分序列?

可以从我上面例举的非递增或者非递减序列中发现,a[i]和a[i+1]重复完全不影响这个序列是什么序列,所以首先我们可以考虑在出现这种情况的时候直接遍历过去,再看划分子序列的关键点,是在当前这种序列中出现不符合特点的情况(出现另一种序列的特征),那么当前这种序列结束,一定可以划分出子序列。

比如题干:1 2 3 2 2 1

1 2 3是非递减序列,比较过程是:1和2比较,判断出当前是非递减序列,在这个条件下循环依次往后一直比较判断,当比较下图3和2时,此时已经不符合非递减序列的特点,此时可以划分出1个子序列。

 

小细节:我们使用a[i]和a[i+1]的方式进行遍历序列比较,遍历条件i<n(n为序列长度),当i=n-1时,此时i+1=n,如果只开n个空间的话,此时下标非法,所以我们要多开1个空间,即n+1。数据我们就放0,因为题干数据范围>=1,0比最小的数还小,并不影响划分子序列。

现在来看代码:(有注释很好懂)

#include <iostream>
#include<vector>
using namespace std;int main() {int n=0;cin>>n;vector<int>v;v.resize(n+1);//多开一个防止越界v[n]=0;//数据范围是1<=n<=10^5,0比最小的还小,不影响比较for(int i=0;i<n;i++){cin>>v[i];}//初始化完成int i=0,count=0;while(i<n){   //非递减序列if(v[i]<v[i+1]){//i<n是为了防止i走到n导致越界while(i<n&&v[i]<=v[i+1]){i++;}//退出while那么一定走到了边界count++;i++;}else if(v[i]==v[i+1]){i++;//相同不影响直接跳过}//非递增序列else{//i<n是为了防止i走到n导致越界while(i<n&&v[i]>=v[i+1]){i++;}//退出while那么一定走到了边界count++;i++;}}cout<<count<<endl;return 0;
}

2.倒置字符串

倒置字符串__牛客网 (nowcoder.com)

这个题相当经典,相信大家应该都做过。

倒置字符串,只需要整体先倒置一遍,再把每个单词倒置一遍就可以达到输出要求。

我们来说说细节,reverse没得说,在algorithm头文件里。读取带空格的字符串使用getline(cin,str_name),str_name是你定义的字符串名称。

我们使用迭代器来寻找要倒置的位置,string的迭代器就是指针(可以看我string类详解中访问及遍历操作中的迭代器模拟实现),迭代器在使用的过程中通常是用!=str_name.end()来实现遍历条件的。

图解:

来看代码:(有注释很好懂)

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;int main() {string s;getline(cin,s);reverse(s.begin(),s.end());//直接使用auto让编译器自动识别类型auto start=s.begin();while(start!=s.end()){auto end=start;while(end!=s.end()&&*end!=' '){end++;}//出来就一定会翻转reverse(start,end);//翻转后更新迭代器//未走到末尾,即走到空格if(end!=s.end()){start=end+1; }//走到末尾else{start=end;}}cout<<s<<endl;return 0;
}

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

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

相关文章

使用docker简单创建一个python容器

/root/docker_python目录结构&#xff1a; . |-- demo | -- main.py -- docker-compose.ymlmain.py内容&#xff1a; # codingutf-8 # -*- coding: utf-8 -*-if __name__ __main__:print("hello world")docker-compose.yml内容&#xff1a; version: "3&q…

注册中心技术Eureka、Nacos

说明&#xff1a;在微服务框架中&#xff0c;各个服务之间都是独立的。理论上来说&#xff0c;各个服务之间是可以直接通信的&#xff0c;但实际上因为服务之间通信需要管理和规划&#xff0c;如请求怎么负载均衡、请求怎么降级处理等等&#xff0c;所以就需要使用一个技术&…

Linux 常用命令

认识 Linux 目录结构 Linux 系统中&#xff0c;磁盘上的文件和目录被组成一棵目录树&#xff0c;每个节点都是目录或文件 Linux 是一个树形目录结构。Linux 上没有盘符概念&#xff0c;不分 C 盘等&#xff0c;根目录 \ 的地位相当与 Java 的 Object ——几个特殊的目录&…

Python+Requests+PyWebIO框架详解,编写测试工具提高团队测试效率

一、背景 老铁们如果是QA,想必也遇到过类似痛点吧: 业务逻辑复杂性决定测试场景复杂性,配置测试场景常常花费大量时间,导致测试效率降低新用户的测试场景,账号可能经常注销,协助debug时需要用userid,每次都得重新抓包。而且测试账号很多,来回切,即使在本地管理userid…

Vue2和vue3中双向数据绑定的原理,ES6的Proxy对象代理和JavaScript的Object.defineProperty,使用详细

简介&#xff1a;Object.defineProperty大家都知道&#xff0c;是vue2中双向数据绑定的原理&#xff0c;它是 JavaScript 中一个强大且常用的方法&#xff0c;用于定义对象属性&#xff0c;允许我们精确地控制属性的行为&#xff0c;包括读取、写入和删除等操作&#xff1b; 而…

Net6下Tracer.Serilog.Fody的serilog配置

得益于Net6、Net7下的新结构&#xff0c;不再需要startup.cs文件&#xff0c;configuration也好读取了&#xff1b; 我比较喜欢在appsettings.json中配置serilog&#xff0c;所以在2步配置时&#xff0c;第一步前面就直接从配置文件configuration中读取&#xff0c;并设置Log.…

uniapp快速开发小程序全流程

uniapp快速开发小程序全流程 完整项目代码&#xff1a;https://gitee.com/Zifasdfa/ziyi-app 欢迎fork与star 1 项目效果及环境准备 1.1 项目效果 本文主要使用uniapp实现一个简单的app应用 1.2 环境准备&项目初始化 ①node环境&#xff1a;去node.js官网下载稳定版的nod…

微服务之Eureka服务注册中⼼

关于务注册中⼼服 服务注册中⼼本质上是为了解耦服务提供者和服务消费者,尽可能量使两者联系可控在一定的范围外 1.在父项目下下引入 Spring Cloud 依赖 <dependencyManagement> <dependencies> <!-- SCN --> <dependency> <groupId> org.sp…

【网站 全选和单选】js 实现-点击全选按钮时,所有的按钮都会被选中或取消选中。

要实现的效果如图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

String常用方法

isEmpty() 判断字符串是否为空。 contains(CharSequence chars) 判断是否包含指定的字符系列。 String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 …

Loki+promtail+Grafana监控docker容器日志

目标&#xff1a;监控docker容器的日志&#xff0c;适用于生产环境 效果&#xff1a; 需要的工具&#xff1a;Loki&#xff0c;promtail&#xff0c;Grafana 通过安装promtail容器收集日志&#xff0c;并把日志发送给loki存储处理&#xff0c;由Grafana展示日志。 参考官网的…

Windows bat隐藏运行窗口的几种方案

文章目录 一、背景二、测试数据三、隐藏bat运行窗口方案1. 使用VBScript脚本2. 使用mshta调用js或vbs脚本3. 将bat编译为exe程序4. 使用任务计划程序 一、背景 有些程序在执行批处理脚本时&#xff0c;可能会看到dos窗口&#xff0c;或者看到窗口一闪而过。如果批处理脚本执行…

(EMQX)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到EMQX

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡&#xff0c;天线 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真…

Python 算法基础篇:大O符号表示法和常见时间复杂度分析

Python 算法基础篇&#xff1a;大 O 符号表示法和常见时间复杂度分析 引言 1. 大 O 符号表示法 a ) 大 O 符号的定义 b ) 示例代码 2. 常见时间复杂度分析总结 引言 在分析和比较算法的性能时&#xff0c;时间复杂度是一项重要的指标。而大 O 符号表示法是用来描述算法时间复杂…

动态规划01背包之416分割等和子集(第10道)

题目&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例&#xff1a; 解法&#xff1a; 先复习一下01背包问题&#xff1a; dp[i][j]的含义&#xff1a;从下标为[0-i]的物品里…

Linux->初识计算机网络

目录 前言&#xff1a; 1 网络发展背景 2 协议 2.1 网络协议初识 2.2 协议分层 2.3 OSI、TCP/IP层状模型 2.4 协议和操作系统的关系 2.5 根据协议栈的通信 3 网络中的地址管理 前言&#xff1a; 本篇当中没有任何关于网络编程的讲解&#xff0c;全部是对网络的宏观理解…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

Mysql数据库备份、索引、视图

目录 备份&#xff1a;先创建如下数据库和表 1、使用mysqldump命令备份数据库中的所有表 2、备份booksDB数据库中的books表 3、使用mysqldump备份booksDB和test数据库 4、使用mysqldump备份服务器中的所有数据库 5、使用mysql命令还原第二题导出的book表 6、进入数据库使…

Jenkins Pipline使用SonarScanner 检查 VUE、js 项目 中遇到的Bug

在 Jenkins 上使用 Pipline 进行集成&#xff0c;利用 SonarScanner 做静态代码扫描的过程中&#xff0c;遇到了几个问题&#xff0c;这里记录了一点解决办法。 在Jenkins上使用Pipline进行集成&#xff0c;利用SonarScanner做静态代码扫描的过程中&#xff0c;遇到了几个问题&…