小黄的刷题之路(十七)——码题集OJ赛-循环移位

2023-11-13

一、题目

在这里插入图片描述
在这里插入图片描述


二、分析思路

2.1 审题理解

  • 给我们一个正整数序列,如果能够通过若干次循环左移调整成一个升序序列,那就输出‘YES’,否则输出‘NO’
  • 所谓循环左移就是把一个数组序列的第一个元素挪到最后面,其他往前挤。所谓升序序列就是序列按照从小到大的顺序,允许一样大

2.2 思路

思路很简单,那就挪挪看呗,总不能光靠眼睛观察吧,一旦序列很长,除非你有写轮眼不然你是很难断定的。

方法对于一个给定的序列,循环左移若干次,直到把序列中最小的元素挪到了最前面,观察此时的序列,如果此时的序列非降,那就说明能够通过若干次循环左移调整成非降序列,输出YES,否则输出NO

但是我们可不是老实人,老实人才会老老实实把序列真的去循环左移好几次,但是你仔细想一想有必要吗,循环左移一次整个数组的元素都要移动,那不老费劲了,有没有办法不挪这个序列就实现循环左移呢,答案是肯定的。

我直接设置两个指针:一个头指针和一个尾指针,头指针指向序列的第一个元素,尾指针指向最后一个元素,一开始当然是两个指针指向数组的首尾,循环左移一次就修改一下这两个指针,指向新的头和尾,这样不用真的去移动数组,只是修改两个变量就好了,多方便。

int head=0,tail=n-1;//序列的头尾指针
while(a[head]!=min)//把最小的挪到最前面
{
    tail = head;
    head += 1;
}

三、代码实现

3.1. C++实现

#include<bits/stdc++.h> 
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    int min=10000;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        if(a[i]<min)min=a[i];//找出序列中最小的
    }
    bool flag=true;//默认可以调成非降序列
    int head=0,tail=n-1;//序列的头尾指针
    while(a[head]!=min)//把最小的挪到最前面
    {
        tail = head;
        head += 1;
    }
    //看看是否非降
    for(int i=head;i!=tail;i=(i+1)%n)if(a[i]>a[(i+1)%n]){flag=false;break;}
    if(flag)cout<<"YES";
    else cout<<"NO";
    return 0;
}

四、总结

  • 这道题本身不难,但是有一个技巧却值得我们注意,那就是善用数组指针,尽量减少元素移动。这道题一开始可能会想真的去一次次循环左移,最后再去判断,但转念一想,循环移位不就是序列的头变成了尾,原来第二个元素变成了新的头,仅此而已,完全可以用两个指针来标识,然后观察这个序列就从head指针开始,一直读到tail指针。这样能节省很多时间

⭐感谢您能看到这里,这是对我莫大的鼓励!⭐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小黄的刷题之路(十七)——码题集OJ赛-循环移位 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 将运算符 << 添加到 std::vector

    我想添加operator lt lt to std vector
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我

随机推荐

  • 腾讯2020校招第一次笔试第1题

    小Q想要给他的朋友发送一个神秘字符串 但是他发现字符串的过于长了 于是小Q 发明了一种压缩算法对字符串中重复的部分进行了压缩 对于字符串中连续的m个相同字 符串S将会压缩为 m S m为一个整数且1 lt m lt 100 例如字符串ABC
  • 如何创建Vue项目

    一 Vue项目构建 1 安装node 简介 Node js并不是我们平常使用的JavaScript库 它是一个JavaScript的运行环境 基于这个环境 我们可以不需要浏览器直接执行js代码 类似于Java的运行环境jdk 安装 官网下载
  • 环境搭建之jetBrains-IDEA安装激活

    1 下载安装程序 2 运行安装程序 3 装完后运行 激活或者破解参考 https blog csdn net justszh article details 81484802 ThisCrackLicenseId licenseId Thi
  • 炒了8年的概念,到底该如何理解DevOps这个词?

    如何实施DevOps成为众多企业迫切面临的问题 本文作者刘相 有10多年的从业经验 他结合自身企业实施DevOps的经验 梳理出DevOps在企业的组织 技术 流程等方面的最佳实践与价值 以及如何搭建DevOps平台来支撑DevOps的落地
  • Windows环境同时安装多个版本的Python解释器(python2和python3)(超详细)

    1 背景描述 众所周知 python当前有两大主流版本 分别是Python2和Python3系列 其中Python3因为对Python2做了较大的优化 使得Python3不会向下兼容 但是工作和学习中 有很多项目需要Python2的环境 有
  • Unity使用UnityWebRequest请求服务器json数据,webgl端服务器请求

    根据unity官方说的 WebGL 网络无法直接访问套接字 由于存在安全隐患 JavaScript 代码无法直接访问 IP 套接字来实现网络连接 因此 NET 网络类 即 System Net 命名空间中的所有内容 具体而言就是 Syste
  • error_80051,source size 2780KB exceed max limit 2MB [时间][appid]

    error 80051 source size 2780KB exceed max limit 2MB 时间 appid 微信小程序预览报错 message Error 系统错误 错误码 80051 source size 2780KB e
  • Docker之容器退出(实战)

    docker实战 一 centos7 yum安装docker docker实战 二 基础命令篇 docker实战 三 docker网络模式 超详细 docker实战 四 docker架构原理 docker实战 五 docker镜像及仓库配置
  • 好用的资源推荐

    前端 扁平化前端css框架 materializecss 很喜欢里面的组件和javascript的调用方式 简单易用多组件好看的css框架 semantic ui 简单好看的基于jquery的消息提示框 CodeSeven toastr 好
  • Java小技巧:避免缓存,Java动态加载配置文件

    Java动态加载配置文件 关键 每次读取都要重新生成流 今天无意间在项目的代码中看到如下这样一段简单加载配置文件的代码 Properties prop new Properties InputStream in PropertiesTest
  • 瀑布流&下拉加载

    瀑布流结合列表下拉加载动画过渡展示 前言 需求默认瀑布流展示列表 下拉加载的时候看到列表顺序过渡加载 1 效果样式 如下 下拉瀑布流加载图片列表 2 引入文件 用到macyjs瀑布流与下拉加载插件mescroll mescroll官网 ht
  • 数据结构学习系列之顺序表的两种插入方式

    方式1 在顺序表末端插入数据元素 代码如下 示例代码 int insert seq list 1 list t seq list int data if NULL seq list printf 入参为NULL n return 1 if
  • 【学习之路】axios之axios.CancelToken

    写法 接受一个回调函数作为参数 new axios CancelToken cancel gt cancel是取消本次请的方法 if xxx cancel else TODO 一般用法 用于发出多个相同请求时 取消重复请求 使用场景 使用数
  • 虚拟机:[Errno 256] No more mirrors to try

    使用linux系统的yum命令去安装一些软件时总是会出现各种问题 下面总结一下 首先确认yum搭建成功 使用mount挂载 每次开虚拟机 都记得要mount挂载 因为这个mount是暂时的 关机后下次就必须重新挂载 不然yum无法正常进行
  • 微信小程序隐藏滚动条的方法,以及禁止上下滑动的方法

    webkit scrollbar display none width 0 height 0 color transparent ms scrollbar display none width 0 height 0 color transp
  • android 手机网络接入点名称及WAP、NET模式的区别

    移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置 APN Access Point Name 即 接入点名称 用来标识GPRS的业务种类 目前分为两大类 CMW
  • PACS系统源码 PACS源码 基于VC + MSSQL开发

    基于VC MSSQL开发的一套大型医院医学影像PACS系统源码 有演示 文末获取联系 PACS系统可以覆盖医院现有放射 CT MR 核医学 超声 内镜 病理 心电等绝大部分DICOM和非DICOM检查设备 支持从科室级 全院级 集团医院级乃
  • @RequestMapping注解和Controller方法建立映射的流程

    当你的才华还撑不起你的野心的时候 唯有静下心来学习 有没有想过 为什么在controller类的方法上 添加一个 RequestMapping toIndex 注解的时候 从浏览器的输入localhost 8080 toIndex请求就可以
  • vscode 配置c/c++环境,与python共用。

    每个人的电脑路径因人而异 下面只是我的配置 仅供参 参考 vscode的安装以及插件软件的安装根据另一个博主的帖子 https blog csdn net weixin 44049923 article details 103619882
  • 小黄的刷题之路(十七)——码题集OJ赛-循环移位

    文章目录 一 题目 二 分析思路 2 1 审题理解 2 2 思路 三 代码实现 3 1 C 实现 四 总结 一 题目 二 分析思路 2 1 审题理解 给我们一个正整数序列 如果能够通过若干次循环左移调整成一个升序序列 那就输出 YES 否则