2019蓝桥杯真题修改数组 C语言/C++

news2024/9/22 21:35:22

题目描述
给定一个长度为 N 的数组 A = [A_1,A_2,··· ,A_N],数组中有可能有重复出现的整数。

现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改A_2,A_3,··· ,A_N当修改 A_i时,小明会检查 A_i是否在 A_1 ∼ A_i−1中出现过。如果出现过,则小明会给 A_i加上 1 ;如果新的 A_i仍在之前出现过,小明会持续给 A_i加 1 ,直 到 A_i没有在 A_1∼ A_i−1−1 中出现过。当 A_N也经过上述修改之后,显然 A 数组中就没有重复的整数了。
现在给定初始的 A 数组,请你计算出最终的 A 数组。

输入描述
第一行包含一个整数 N。

第二行包含 N 个整数 A_1,A_2,··· ,A_N。

其中,1≤N≤10^5
,1≤A i ≤10^6 。
输出描述
输出 N 个整数,依次是最终的 A_1,A_2,··· ,A_N 。

输入输出样例
示例
输入

5
2 1 1 3 4

输出

2 1 3 4 5

运行限制
最大运行时间:1s
最大运行内存: 256M

所需变量

int a[2000005] = 0;//定义一个长度为2000005长度的数组变量a

int b[100005];//定义一个b数组,方便接收每一个输入进来的数

int N;//代表有多少个数

int control;//用于去表示b[i],找到没有过的数,然后进行判断

总思路:我们首先接收N,表示有多少个数,然后一个一个接收这些数,当然啦,每接收一个我就判断以这个数为下标的数组a中是否已经有,如果没有,我们就把数组a中以这个数为小标的赋值为1,如果有的话,那么我们就不断往后寻找,知道寻找到不为1的数,然后将这个下标改为这个数(这个就是本题目的意思)
第一次代码如下(编译器是dev,语言是C语言):

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int a[2000005] = {0},b[100005];
  int N,control = 0;
  cin>>N;
  for(int i = 0;i < N;i++){
    cin>>b[i];
    if(a[b[i]] == 0){
      a[b[i]] = 1;
    }else if(a[b[i]] == 1){
      control = b[i];
      while(a[control] == 1){
        control++;
      }
      b[i] = control;
      a[control] = 1;
    }
  }
  for(int i = 0;i< N;i++){
    if(i == 0){
      cout<<b[i];
    }else{
      cout<<" "<<b[i];
    }
  }
  //cout<<endl;
  return 0;
}

在这里插入图片描述
这样做完后,发现运行超时,好家伙,我就觉得肯定是有一连串的1,举个例子,可能有很多个2输入进去,一直连续到1000,那么我们后面输入2,也还是从2开始不断地往后判断,3,4,5,6…一直到1001,这样其实是做不断循环的操作,那么我们对上面的代码进行改进,那就是,当2这个数出现后,一直判断到1000,那么我们就把数组a中的a[2]改为10001,这样他下次判断就直接从1001开始,如果还是很多个2,直到5000,那么a[2]的值就是5001,这样做完后,时间复杂度大大降低,因此我们也通过了此题目!
该算法本人认为还是比较优,如果有更好的想法,欢迎q我!

第二次修改后的代码如下(编译器是dev,语言是C语言):

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int a[2000005] = {0},b[100005];
  int N,control = 0;
  cin>>N;
  for(int i = 0;i < N;i++){
    cin>>b[i];
    if(a[b[i]] == 0){
      a[b[i]] = 1;
    }else{
      control = b[i];
      if(a[control]!=1){
        control = a[control];
      }
      while(a[control] != 0 ){
        control++;
      }
      a[b[i]] = control;
      b[i] = control;
      a[control] = 1;
    }
  }
  for(int i = 0;i< N;i++){
    if(i == 0){
      cout<<b[i];
    }else{
      cout<<" "<<b[i];
    }
  }
  //cout<<endl;
  return 0;
}

在这里插入图片描述

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

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

相关文章

2023年2月访问学者博士后热门国家出入境政策变化汇总

近期关于出国的咨询量日益增多&#xff0c;出入境政策也是其中之一。所以本期知识人网小编汇总了最新访问学者和博士后关注的热门国家及地区入境政策变化&#xff0c;提供给大家。目前各国入境政策大致分为三种&#xff1a;一、 无法入境的国家如&#xff1a;摩洛哥、朝鲜等。二…

iconfont 图标如何在uniapp中的tabBar使用

注意&#xff1a; 小程序并不支持tabBar中 设置 iconfont 1. 材料准备 首先进入字体图标网址&#xff1a;iconfont-阿里巴巴矢量图标库&#xff1b;&#xff08;如果你没有登入&#xff0c;记得登入一下&#xff09; 把图标添加入购物车 添加到购物车之后-&#xff08;右上角…

逻辑回归—分类问题的操作顺序

对于二元分类问题来说&#xff0c;分类的结果和数据的特征之间仍呈现相关关系&#xff0c;但是y的值不再是连续的&#xff0c;是0&#xff5e;1的跃迁。但是在这个过程中&#xff0c;什么仍然是连续的呢&#xff1f;”是概率&#xff0c;概率是逐渐升高的&#xff0c;当达到一个…

JVM12 字节码指令集

1. 概述 2. 加载与存储指令 2.1. 局部变量压栈指令 iload 从局部变量中装载int类型值 lload 从局部变量中装载long类型值 fload 从局部变量中装载float类型值 dload 从局部变量中装载double类型值 aload 从局部变量中装载引用类型值&#xff08;refernce&#xff09; iload_0 从…

从交换机安全配置看常见局域网攻击

前言 构建零信任网络&#xff0c;自然离不开网络准入(NAC)&#xff0c;这就涉及到交换机的一些安全测试&#xff0c;于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击&#xff0c;那么下面提到的各种攻…

leaflet 绘制多个点的envelope矩形(082)

第082个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中如何根据多边形的几个坐标点来绘制envelope矩形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共78行)安装插件相关API参考:专栏目标示例…

【Java】线程的生命周期和状态

一、通用的线程的生命周期&#xff0c;简称&#xff1a;五态模型&#xff1a; 初始状态&#xff1a;指语言层面上的创建线程&#xff0c;操作系统中还没有创建。可运行状态&#xff1a;指线程可以分配CPU执行&#xff0c;这时线程已经在系统中创建成功。运行状态&#xff1a;指…

0元搭建linux服务器(windows笔记本)

0元搭建linux服务器一.windows装Centos71.1 centos7 iso镜像1.2 准备U盘1.3 UltraISO 启动盘制作工具安装1.4 准备一台windows 机器1.5 安装过程二 、连接无线wifi三、固定wifi ip3.1 查看网络状态3.2 查看DNS3.3 查看GATEWAY3.4 设置静态IP四、一键快速安装单机版k8s五、申请域…

基于CCG算法的IEEE33配电网两阶段鲁棒优化调度matlab

目录 1 前言 2基本内容 2.1 配网两阶段鲁棒模型 2.2 求解步骤 3部分程序 4程序结果 5程序链接 1 前言 鲁棒优化是电力系统研究的热点&#xff0c;而两阶段鲁棒和分布鲁棒研究就成为各类期刊&#xff08;sci/ei/核心&#xff09;的宠儿&#xff0c;最简单的思路是通过改…

CACTER云网关无缝对接O365系统,反垃圾实力强硬!

01 客户背景 某IT互联网企业是国家认定的高新技术企业、上海市重点大数据企业。自成立以来&#xff0c;坚持以自主研发为本&#xff0c;以客户为中心&#xff0c;专注汽车保险科技&#xff0c;具备强大的研发实力&#xff0c;致力为行业提供数字化智能化车商保险业务管理综合解…

python采集最新世界大学排名, 来看看你的母校上榜没~

前言 大家早好、午好、晚好吖 ❤ ~ 本次内容: Python 采集世界大学排行榜 并做数据可视化 知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 pip install 模块名 本次文…

基于 DSP+FPGA 的高清图像跟踪系统研制

目标识别与跟踪技术是目前图像处理研究的重点方向&#xff0c;在军事和民用领域中 具有广泛的应用价值&#xff0c;如精确制导武器、导弹飞机预警等军事领域&#xff0c;如交通管理、 刑事侦查等民用领域。其中&#xff0c;如何在复杂的背景中&#xff0c;提取、识别与跟踪特定…

File类的用法和InputStream,OutputStream的用法

这里写自定义目录标题一、File类1.构造方法2.普通方法二、InputStream1.方法2.FileInputStream3.Scanner类的应用三、OutputStream1.方法2.FileOutputStream3.PrintWriter类的应用一、File类 1.构造方法 签名说明File(File parent, Stringchild)根据父目录 孩子文件路径&…

车载前摄像头学习笔记 ———— 视频编码格式

文章目录简介格式H.26XH.261H.263H.264/AVCNALU HeaderNALU PayloadSODBRBSPEBSPMPEG-XMPEG-1MPEG-2MPEG-4MPEG-7MPEG-21简介 视频是可以理解为连续的图像序列。获取的一帧即为一幅图像&#xff0c;在每一帧的数据中&#xff0c;所有的内容都是静止的。为什么看起来是运用的呢&…

c/c++开发,无可避免的模板编程实践(篇六)

一、泛型算法 1.1 泛型算法概述 c标准库不仅包含数据结构&#xff08;容器、容器适配器等&#xff09;&#xff0c;还有很多算法。数据结构可以帮助存放特定情况下需要保存的数据&#xff0c;而算法则会将数据结构中存储的数据进行变换。标准库没有给容器添加大量的功能函数&am…

基于springboot+vue的校园社团管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

9.循环神经网络

9.循环神经网络 目录 序列模型 统计工具 自回归模型 马尔可夫模型 训练 预测 文本预处理 读取数据集 词元化 词表 整合所有功能 总结 语言模型和数据集 学习语言模型 马尔可夫模型与m元语法 自然语言统计 读取长序列数据 随机采样 顺序分区 总结 循环神经…

树状数组(高级数据结构)-蓝桥杯

一、简介树状数组 (Binary Indexed Tree,BIT)&#xff0c;利用数的二进制特征进行检索的一种树状结构。一种真正的高级数据结构&#xff1a; 二分思想、二叉树、位运算、前缀和。高效!代码极其简洁!二、基本应用数列a1,a2,....,an&#xff0c;操作&#xff1a;单点修改&#xf…

微服务架构是什么?微服务架构与SOA的区别

微服务架构定义微服务架构是一种架构风格和架构思想&#xff0c;它倡导我们在传统软件应用架构的基础上&#xff0c;将系统业务按照功能拆分为更加细粒度的服务&#xff0c;所拆分的每一个服务都是一个独立的应用&#xff0c;这些应用对外提供公共的API&#xff0c;可以独立承担…

Python3 operator 模块

Python3 operator 模块 Python2.x 版本中&#xff0c;使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数&#xff0c;如果你需要实现比较功能&#xff0c;需要引入 operator 模块&#xff0c;适合任何对象&#xff0c;包含…