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

news2024/12/24 2:53:22

目录

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.coloradmin.cn/o/758558.html

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

相关文章

运动控制-达妙C#开源USB2CAN例程

C# Can总线资料不多, 达妙USB2CAN入口 http://www.dmbot.cn/forum.php?modviewthread&tid328&extrapage%3D1

怎么自学网络安全?遇到问题该怎么解决?

趁着今天下班&#xff0c;我花了几个小时整理了下&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在象牙塔里都很迷茫&#xff0c;到了大三大…

帝国cms如何判断首页高亮显示

通过简单的代码判断当前页面是否为首页并且进行高亮的代码如下&#xff1a; 判断逻辑是获取当前栏目id&#xff0c;如果为空则为首页。 条件判断代码&#xff1a; <?php if(empty($GLOBALS[navclassid])){echo class"active";}?> 需要特别说明的此判断会…

二进制文件的Python写入与读取

二进制文件的Python编写 这么基础的东西&#xff0c;必然用内置的就好 二进制文件的Python读写 重要提示 p.s. 1 >>> bHello World.decode() "Hello World" True >>> example import struct with open(binary_file.bin, wb) as file:data b…

【华为机试】HJ17 坐标移动详解+完整源代码示例

忙碌了一周&#xff0c;一直没时间更新&#xff0c;趁着周末来更新第二个题目。 题目 题目解析 这个题目相比于上一个题目来说&#xff0c;会简单一些&#xff0c;不涉及到那些复杂的算法&#xff0c;就是对于字符串的处理。 算法步骤 输入一个字符串根据分号&#xff0c;将…

uniapp 集成七牛云,上传图片

1 创建项目 我是可视化创建项目的 &#xff0c;cli创建的项目可以直接使用npm安装七牛云。 2 拷贝qiniuUploader.js到项目&#xff0c;下面的回复 放了qiniuUploader.js百度云链接。 3 在需要使用qiniuUploader的vue文件 引入。 4 相册选择照片&#xff0c;或者拍照后&#xff…

Redis-持久化、主从集群、哨兵模式、分片集群、分布式缓存

文章目录 高级篇 - 分布式缓存 Redis集群0、单节点Redis的问题一、Redis持久化1.1 RDB 持久化1.1.1 基本介绍1.1.2 RDB的fork原理1.2.3 总结 1.2 AOF持久化1.3 RDB与AOF对比 二、Redis主从集群2.1 介绍2.2 搭建主从集群2.2.1 准备实例、配置2.2.2 启动2.2.3 开启主从关系2.2.4 …

快速而简单的视频格式转换方法

在数字时代&#xff0c;我们经常需要将视频文件从一种格式转换为另一种格式。无论是因为兼容性问题&#xff0c;还是为了在特定设备上播放视频&#xff0c;视频格式转换是一项非常常见的任务。本文将介绍视频格式转换的基本知识和步骤。 首先&#xff0c;了解不同的视频格式非常…

8.3 非正弦波发生电路

在实用电路中除了常见的正弦波外&#xff0c;还有矩形波、三角波、锯齿波、尖顶波和阶梯波&#xff0c;如图8.3.1所示。 一、矩形波发生电路 矩形波发生电路是其它非正弦波发生电路的基础&#xff0c;例如&#xff0c;若方波电压加在积分运算电路的输入端&#xff0c;则输出就…

数学建模-相关系数

excel基本操作&#xff1a;ctrl右&#xff0c;ctrl左&#xff0c;ctrlshift下/右&#xff0c;ctrlshift空格 题目里有数据&#xff0c;给出描述性统计是比较好的习惯 excel描述性统计&#xff1a;数据-数据分析-描述统计 MATLAB要做散点图C62个 SPSS可以直接画出两两之间的散…

华为OD机试真题 Java 实现【最小循环子数组】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、备注五、Java算法源码六、效果展示1、输入2、输出 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有…

koa初体验———swagger使用

学习完koa框架和mysql&#xff0c;写了一个小demo&#xff0c;选课管理系统&#xff0c;其中包含权限验证&#xff0c;登录注册&#xff0c;用户管理和选课管理。写这个项目目的一方面是为了自己练手&#xff0c;另一方面是为了我们在学习新技术的时候能够有接口供我们使用去测…

Cilium基础架构

Cilium作为一款Kubernetes CNI插件&#xff0c;从一开始就是为大规模和高度动态的容器环境而设计&#xff0c;并且带来了API级别感知的网络安全管理功能&#xff0c;通过使用基于Linux内核特性的新技术——BPF&#xff0c;提供了基于service/pod/container作为标识&#xff0c;…

树莓派-家庭健康监测-空气篇

树莓派-家庭健康监测-空气篇 最后编辑日期: 2023.7.16 1、背景和目标 室内空气中高浓度的二氧化碳会损害人类的认知能力和健康&#xff0c;良好室内空气质量的重要性和价值不言而喻。家庭健康监测-空气篇应运而生。 最后效果总览: 细节: 手机预览: 实现功能: 二氧化碳…

Redis数据类型的常用命令和应用场景

1. Redis数据类型概述 Redis 常见的数据类型有10 种&#xff0c;其中包括 5 种基本数据类型&#xff1a;Strings(字符串)、Lists(列表)、Sets(集合)、Hashes(散列)、Sorted sets(Zset有序集合)。除了基本数据类型外&#xff0c;还有 5 种常用数据类型&#xff1a;Bitmaps 、Hy…

《二叉搜索树OJ》

文章目录 1、 [根据二叉树创建字符串](https://leetcode.cn/problems/construct-string-from-binary-tree/)2、 [二叉树的层序遍历](https://leetcode.cn/problems/binary-tree-level-order-traversal/)3、 [二叉树的层序遍历 II](https://leetcode.cn/problems/binary-tree-le…

5.3 Python高级特性之-列表生成式、生成器、迭代器

一、 列表生成式 是Python内置的非常简单却强大的可以用来创建list的生成式 具体可根据如下案例理解&#xff0c;且代码也是可用的""" 1、 生成[0,1,2,3,4,5,6]这样列表 """ print(list(range(0, 7))) """ 2、 生成[0&#xff0…

MyBatis入门案列

MyBatis入门案列 开发Mybatis程序的步骤&#xff1a; 1、配置mybatis conf.xml: 配置数据库信息 和 需要加载的映射文件 &#xff12;、表 - 类 映射文件xxMapper.xml: 增删改查标签<select> &#xff13;、测试类: session.selectOne(“需要查询的SQL的namespace.id”…

jenkins 采用ssh方式连接gitlab连接不上

一、gitlab 添加jenkins服务器的公钥 jenkins 生成秘钥命令 ssh-keygen -t rsa2.jenkins 秘钥地址&#xff1a; cd /root/.ssh3.复制公钥 到gitlab 添加 cat id_rsa_pub4.添加私钥到jenkins cat id_rsa5.绑定&#xff08;顺利的话到这里就结束了&#xff09; &#xff0…

oc基本控件2

// // ViewController.m // OcDemoTest // // Created by Mac on 2023/7/14. //#import "ViewController.h"interface ViewController () // label property (weak, nonatomic) IBOutlet UIImageView *imageView; // Use of undeclared identifier // 全局propert…