排序子序列(牛客)

news2024/11/24 19:39:18

目录

一、题目

二、代码

(一)时间复杂度过高(通过70%)

(二)改进 


一、题目

二、代码

(一)时间复杂度过高(通过70%)

#include <iostream>
#include <vector>
#include<cstdbool>
using namespace std;

bool ASC(vector<int>a, int begin, int end)
{ //升序
    if (begin == end)
        return true;
    for (int k = begin + 1; k <= end; k++)
    {
        if (a[k] >= a[k - 1])
        {
            continue;
        }
        else
        {
            return false;
        }
    }
    return true;
}


bool DESC(vector<int>a, int begin, int end)
{ //降序
    if (begin == end)
        return true;
    for (int k = begin + 1; k <= end; k++)
    {
        if (a[k] <= a[k - 1])
        {
            continue;
        }
        else
        {
            return false;
        }
    }
    return true;
}
int main() {
    int n;
    cin >> n;
    vector<int>data;
    int x;
    for (int i = 0; i < n; i++) {
        cin >> x;
        data.push_back(x);
    }

    int sum = 0;
    int start = 0, oldstart = -1;
    int prev = 0;
    int next = 0;
    while (next <= n - 1)
    {
        if (ASC(data, start, next) || DESC(data, start, next))
        {
            prev = next;
            ++next;
            continue;
        }

        if (start != oldstart)
        {
            sum += 1;
            oldstart = start;
            start = next;
        }

    }
    if (start != oldstart)
    {
        sum += 1;
    }

    cout << sum;
    return 0;
}

(二)改进 

  •  主要是将判断升序和降序的代码合并成了一个!!!
bool isSort(vector<int>& a, int begin, int end, bool increasing) 
{
    if (begin == end) 
        return true;
    for (int k = begin + 1; k <= end; k++) 
    {
        if (increasing) //升序
        {
            if (a[k] >= a[k - 1]) 
                continue;
            else 
                return false;
        }
        else //降序
        {
            if (a[k] <= a[k - 1]) 
                continue;
            else 
                return false;
        }
    }
    return true;
}

完整代码

#include <iostream>
#include <cstdbool>
#include <vector>
using namespace std;

bool isSort(vector<int>& a, int begin, int end, bool increasing) 
{
    if (begin == end) 
        return true;
    for (int k = begin + 1; k <= end; k++) 
    {
        if (increasing) //升序
        {
            if (a[k] >= a[k - 1]) 
                continue;
            else 
                return false;
        }
        else //降序
        {
            if (a[k] <= a[k - 1]) 
                continue;
            else 
                return false;
        }
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    vector<int> data;
    int x;
    for (int i = 0; i < n; i++) 
    {
        cin >> x;
        data.push_back(x);
    }

    int sum = 0;
    int start = 0, oldstart = -1;//oldstart用于表示上一次有序子序列开始的下标
    int prev = 0;
    int next = 0;

    while (next <= n - 1) 
    {
        if (isSort(data, start, next, true) || isSort(data, start, next, false)) 
        {
            prev = next;
            ++next;
            continue;
        }

        if (start != oldstart) {
            sum += 1;
            oldstart = start;
            start = next;
        }
    }

    if (start != oldstart) //跳出循环,最后一个子序列的判断
    {
        sum += 1;
    }

    cout << sum;
    return 0;
}

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

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

相关文章

C语言内功修炼--指针详讲(进阶)

前言&#xff1a; 通过之前的指针初阶讲解&#xff0c;相信大家已经大概明白了指针的概念以及基本用法&#xff0c;这里我再来整理一下&#xff1a; 1.指针就是一个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识着内存的一块空间。 2.指针具有类型&#xff0c;指针…

单元测试的重要性

前言 在日常生活中&#xff0c;单元测试无论是对软件测试人员还是开发人员&#xff0c;都扮演着重要的角色。这主要是因为&#xff0c;单元测试在开发阶段&#xff0c;可以确保每个组件和程序都能够正常的运行。 很多开发人员都讨厌编写单元测试&#xff0c;但是它可以在开发…

变量使用、

六&#xff1a;变量使用 1.语法格式 变量调用语法&#xff1a; {{ var_name }} 案例&#xff1a; 通过命令行传递变量&#xff1a;&#xff08;通过--extra-vars或-e选项来传递keyvalue变量&#xff09; vim var.yaml 传递字典(同时传递多个变量) vim var-1.yaml 案例二…

竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

居家养老一键通的功能

居家养老一键通的功能 居家养老一键通是指为老年人提供全方位的居家养老服务的平台或系统。它通过整合各种资源和服务&#xff0c;为老年人提供便捷、安全、舒适的居家养老环境&#xff0c;帮助他们解决生活中的各种难题。 居家养老一键通的功能通常包括以下几个方面&#xff…

深拷贝与浅拷贝(对象的引用)

可以用赋值 1.对象的引用 代码&#xff1a; <!-- 1.对象的引用 --><script>const info{name:"lucy",age:20}const objinfo;info.name"sam"console.log(obj.name) //sam</script>图解&#xff1a; 等于号的赋值&#xff0c;对象info…

ARMv7-A 那些事 - 4.处理器模式与特权等级

By: Ailson Jack Date: 2023.09.23 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/156.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

二、iMove-cli 本地开发模式

引言&#xff1a;iMove cli肩负着落库逻辑代码的重要责任&#xff0c;本文主要介绍本地开发模式下cli的工作。 书接上文&#xff0c;iMove主要由3个包组成&#xff1a;cli、compile-code、core&#xff0c;此外还有一个插件库plugin-store&#xff0c;这个后续文章再出&#xf…

机器学习的数据

数据 数据整体的信息 我们整个数据就可以表示成这样 上图中的数据整体叫数据集(data set)图中每一行数据称为一个样本(sample)。除最后一列&#xff0c;每一列表达样本的一个特征(feature)最后一列称为标记&#xff08;label&#xff09; 除了第一行和最后一列以外的信息就是…

el table 修改鼠标在行上改变背景颜色

el table 在制作的时候&#xff0c;需要修改当鼠标停留在指定行上的时候&#xff0c;修改背景颜色等相关样式。 这里面记录一下 1. 首先&#xff0c;在table上面添加class&#xff0c;如下图: 2. 然后再最下面下面创建style样式&#xff0c;是<style scoped> 的&#x…

滑动窗口9.23

1876.长度为3且各字符不同的子字符串 1876. 长度为三且各字符不同的子字符串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/substrings-of-size-three-with-distinct-characters/?envTypelist&envId24zW97w8自写思路&#xff1a; 数组充当哈希表…

Spring面试题16:Spring框架中的单例bean是线程安全的吗?Spring框架中bean的生命周期?哪些是重要的bean生命周期方法?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring框架中的单例bean是线程安全的吗?为什么? 是的,Spring框架中的单例Bean是线程安全的。 Spring中的单例Bean默认是在容器启动时创建的,并…

【Cpp】位图Bitmap

code #include <iostream> #include <vector> #include <stdio.h> #include <stdint.h>class Bitmap { private:std::vector<uint8_t> data; // 存储位图数据的字节数组uint32_t size; // 位图的大小&#xff08;以位为单位&#x…

springboot整合aop,实现日志操作

前言&#xff1a; 整合之前&#xff0c;我们要明白aop是什么&#xff0c;为什么要用aop&#xff0c;aop能帮我们做什么。 答&#xff1a;AOP是面向切面编程&#xff08;Aspect-Oriented Programming&#xff09;的简称&#xff0c;它是一种编程思想&#xff0c;旨在在面向对象…

【AI视野·今日Sound 声学论文速览 第十期】Fri, 22 Sep 2023

AI视野今日CS.Sound 声学论文速览 Fri, 22 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Performance Conditioning for Diffusion-Based Multi-Instrument Music Synthesis Authors Ben Maman, Johannes Zeitler, Meinard M lle…

数据库中的DDL与DML

标签&#xff1a;数据库 记录下DDL和DML的相关概念。 数据定义语言 定义数据库模式 数据定义语言DDL(Data-Definition Language)可定义数据库模式。数据库模式在之前的文章中已经提到过了。简单来说&#xff0c;建表用的SQL语句就是DDL。如下代码 CREATE TABLE department(de…

使用Python做一个微信机器人

介绍 简介 该程序将微信的内部功能提取出来&#xff0c;然后在程序里加载Python&#xff0c;接着将这些功能导出成库函数&#xff0c;就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py&#xff0c;类似于你在命令行使用python main.py。 现在会以…

用《斗破苍穹》的视角打开C#多线程开发1(斗帝之路)

Thread.Start() 是的&#xff0c;我就是乌坦城那个斗之气三段的落魄少爷&#xff0c;在我捡到那个色眯眯的老爷爷后&#xff0c;斗气终于开始增长了。在各种软磨硬泡下&#xff0c;我终于学会了我人生中的第一个黄阶斗技——吸掌。 using System.Threading;namespace Framewo…

第一部分:HTML5

一&#xff1a;网页 1.1&#xff1a;什么是网页&#xff1f; 网站是指在因特网上根据一定的规则&#xff0c;使用HTML等制作的用于展示特定内容相关的网页集合 网页是网站中的一"页"&#xff0c;通常是HTML格式的文件&#xff0c;它要通过浏览器来阅读 网页是构成网…

透视俄乌网络战之四:西方科技巨头的力量

透视俄乌网络战之一&#xff1a;数据擦除软件 透视俄乌网络战之二&#xff1a;Conti勒索软件集团&#xff08;上&#xff09; 透视俄乌网络战之三&#xff1a;Conti勒索软件集团&#xff08;下&#xff09; 西方科技巨头的力量 1. Palantir2. SpaceX3. Maxar Technologies4. Cl…