蓝桥杯寒假集训第七天(修改数组)

news2024/9/23 19:14:51

没有白走的路,每一步都算数🎈🎈🎈

题目描述:

给定一个已知长度的数组,要求出由其变换而来的一组没有重复数据的数组。假定有一个数组A[0,1,2,3,4]。要求如果A[i]在之前的数组A[0,1,2,3..i-1]之中若出现过,那么A[i]这个数据就要加1,否则不变。

输入描述:

第一行:

第一行表示数组的长度n

第二行:

一组数据,数据可以重复

输出描述:

输出最后没有重复数字的数组

样例输入输出:

样例输入:

5

2 1 1 3 4

样例输出:

2 1 3 4 5

算法思路:

本题运用到并查集的思想。

算法讲解:

借鉴了一位用python写出并查集算法的思路,自己也是第一次接触这个算法。

修改数组-清风的代码 - 蓝桥云课

 AC代码

import os
import sys

def find(x):
    global fa
    if fa[x] != x:
        fa[x] = find(fa[x])
    return fa[x]

N = int(input())

A = [int(temp) for temp in input().strip().split()]

fa = [i for i in range(1000001)]

for i in range(N):
    # 2 1 1 3 4
    # 首先2 的父亲是2 并同时把父亲数组中A[i]位置元素修改为3
    # 其次为1 1的父亲是1 同时把父亲数组中1位置元素修改为2
    # 获得 1 1的父亲此时为3 输出3 并将3的父亲修改为4
    # 获得3 3的父亲此时为4 输出4 并将此时3的父亲修改为5
    # 获得4 4的父亲此时为5 输出5 并将此时5的父亲修改为6
    A[i] = find(A[i])
    fa[A[i]] = find(A[i] + 1)

for i in range(N):
    print(A[i], end="")
    if i != N - 1:
        print(" ", end="")

算法耗时最长的情形:

算法最耗时的一点就是当数组中出现的数据全是一样的数据的时候,比如[1,1,1,1,1]。那么A[i]的赋值就会要经过i次的赋值,比方说第一个A[0],需要经过0次赋值,其本身就是1,A[1]就需要1次赋值,得先找到fa[2]中等于2的值,A[2]就需要2次赋值,先是找到fa[1] != 2,接着找fa[2]不等于3,最后找到fa[3] = 3然后再将3的值赋值给A[2],即此时的原来的数组已经变成[1,2,3,1,1],同理下面的变化也是如此,A[3]就要经过3次赋值,A[4]就要经过4次赋值,最终数组才能变成[1,2,3,4,5]。这种情况算法的耗时最长。

 

算法耗时最短的情形:

数组全为[1,2,3,4,5]这种递增序列的时候,这种算法的耗时是最短的。

 看的出来这里面还是有细微的差距的😂😂😂

find函数的定义:

find函数的主要目的是为了找到每个元素的父元素,并且将父元素的值赋值给A[i],最开始的父元素满足的条件是fa[i]  = i,当出现有将fa[i]的值赋值给A[i]的时候,也就是说此时数组已经出现过此数字,后面的数组中不能再次出先这个数字,所以我们需要设定把这个下标对应的fa[下表]设定成一个只有在最开始被初始化使用过的,并且是最小的fa[未知]的数据,这样就能够保证整个数组的每一个数字都没有重复。

所以代码的主要目的还是理解

每日一句

摘自《《晚熟的人》》:

勇气是:当你知道自己在开始之前就会输,但你还是要去做,无论如何都要坚持下去。你很少赢,但有时你会。

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

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

相关文章

关于win11 21H2 升22H2及安装安卓子系统的记载

前言 电脑是i7 7700的,没有TPM2.0。但是喜欢折腾,喜欢win11任务栏的居中,之前win10的时候,会用插件折腾。既然有原生的了,自然更好了。 win11系统升级 关于win11系统下载 直接百度搜索win11系统下载,然…

【数据结构】(牛客)链表的回文结构,LeetCode相交链表,LeetCode环形链表

目录 一、链表的回文结构 1、题目说明 2、题目解析 二、相交链表 1、题目说明 2、题目解析 三、环形链表 1、题目说明 2、题目解析 一、链表的回文结构 1、题目说明 题目链接:链表的回文结构 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度…

RHCE-ssh服务设置

目录 要求: 1.两台机器:第一台机器作为客户端,第二台机器作为服务器,在第一台使用rhce用户免密登录第二台机器 2.禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3 3, 只允许sshuser3登录&#xff…

Java开发入门到精通之Java的数据库访问

一、前言 在应用程序开发中,需要使用数据库管理和存储各种数据。在Java中,提供了一个JDBC技术(Java Database Connectivity,JDBC,Java数据库连接),它的作用是连接数据库并访问。接下来小编带大家一起来学习JDBC技术! …

天猫汽车商详页的SSR改造实践

由于汽车业务的特殊性,天猫汽车基于 Rax 多页应用自建了商品详情的 H5 页面。自定义商详承载了众多业务能力和投放场景。随着业务的发展和页面承载内容的增多,开始出现白屏时间太长等体验问题。前端性能优化算是个老生常谈的问题,我们的页面已…

DBeaver安装教程

软件安装包官网地址https://dbeaver.io/但一般由于网络问题,我们是很慢才连接上,或者连接不上这里提供压缩包链接,解压可直接用,亲测链接:https://pan.baidu.com/s/14KGY0JakRTOHQVkiRUWc7g?pwdcxda 提取码&#xff1…

2022年第十二届APMCM亚太杯1月增赛E题思路分享

2022年亚洲及太平洋地区建模数学竞赛问题E 有多少颗核弹可以摧毁地球? 题目回顾: 1.基本数据分析 a) 哪些国家曾经拥有过核武器? b) 在过去的20年中,哪个国家的核武器库存减少或增加得最多? c) 在哪五年早,核武器试验发生的次数最多…

【笔记:模拟CMOS集成电路】噪声——分析基础(1)

【笔记:模拟CMOS集成电路】噪声——分析基础(1)前言1噪声的定义2噪声的描述2.1统计特性(1)平均功率(2)功率谱密度(PSD)2.2噪声相关指标(1)SNR&…

【C++】vector用法简单模拟实现

文章目录1.vector的介绍及使用1.1 vector基本概念1.2 vector的使用1.2.1 vector的定义 (构造函数)1.2.2 vector的迭代器使用1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题(重点)1.2.5 vector 空间增长问题2. vector的模拟实现2.1 SGI版vector实现示…

Logback的使用

文章目录概述使用配置文件详解<appender>ConsoleAppenderFileAppenderRollingFileAppender滚动策略<root><encoder>日志级别概述 Logback是一个实现了Slf4j 规范的实现框架&#xff0c;log4j的作者实现了Logback。 下面这是Logback官网的介绍&#xff1a; …

排序算法之插入排序

目录 排序算法介绍 插入排序 算法流程 算法实现 python C 插入排序与冒泡排序 排序算法介绍 《Hello算法》是GitHub上一个开源书籍&#xff0c;对新手友好&#xff0c;有大量的动态图&#xff0c;很适合算法初学者自主学习入门。而我则是正式学习算法&#xff0c;以这本…

云原生丨DBSwitch数据迁移实践

文章目录一、前言一、部署1. 环境准备2. 安装包部署二、使用1.登录2. 使用步骤-gauss迁移到gauss3. 使用步骤-MySQL迁移到gauss三、postgres和 gauss差异说明一、前言 DBSwitch是一个异构数据库迁移工具&#xff0c;能够提供源端数据库向目的端数据库的批量迁移同步功能&#…

Spring的体系结构介绍

Spring框架采用的是分层架构&#xff0c;它一系列的功能要素被分成20个模块&#xff0c;这些模块大体分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation、Messaging和Test。 上图中&#xff0c;包含了Spring框架的所有模…

windows 安装docker使用教程

一、win10上安装docker注册docker账号配置虚拟化启用 bios 虚拟化&#xff0c;是否已启用可以通过任务管理器查看如果没有启动请看&#xff0c;否则可以直接跳到2开启 Hyper-V进行后续操作&#xff1a;irtualization Technology(VT)&#xff0c;中文译为虚拟化技术&#xff0c;…

LabVIEW拓扑

LabVIEW拓扑交换机拓扑是交换机模块上通道和继电器的组织表示形式。拓扑通常显示模块上继电器的默认连接&#xff0c;并标记通道名称。某些交换机模块可以使用多个拓扑或拓扑的变体。某些接线端子或附件可能会强制交换机模块使用给定的拓扑或拓扑集。NI-开关 支持 以下 拓扑&am…

009-Ensp-实验-VLAN间互联

实验要求 实现两台不同vlan的设备可以互联 实验结构 实验步骤 1. PC1 /PC2 配置ip /gateway 2. LSW4 新增两个VLAN e0/0/2 - e0/0/3 设置为access类型 加入到不同的vlan e0/0/1 设置为trunk类型 允许所有tag经过 3. LSW3 新增两个VLAN g0/0/1 设置为trunk 允许所有tag经过…

Http Https TCP/IP理解

一、 TCP Http Https UDP IP 介绍TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议&#xff0c;而是指一个由FTP、SM…

[数据结构基础]树和二叉树的概念、结构及性质

目录 一. 树 1.1 树的概念及结构 1.2 树和树的节点的相关概念 1.3 定义树的四种方式 1.3.1 说明了树的度为N 1.3.2 采用顺序表的方式存储子节点 1.3.3 采用结构体数组进行存储 1.3.4 左孩子右兄弟表示法&#xff08;最优&#xff09; 二. 二叉树 2.1 二叉树的概念及结…

完爆90%的性能毛病,数据库优化八大通用绝招

毫不夸张的说咱们后端工程师&#xff0c;无论在哪家公司&#xff0c;呆在哪个团队&#xff0c;做哪个系统&#xff0c;遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论&#xff0c;能让大家快速、准确的去选择出合适的优化方案&#xff0c;我相信…

9.JS-作用域-预解析

1.作用域 代码名字&#xff08;变量&#xff09;在某个范围内起作用和效果&#xff0c;目的是为了提高程序的可靠性&#xff0c;减少命名冲突 2.js作用域的分类&#xff08;es6之前&#xff09; 全局作用域和局部作用域 全局作用域&#xff1a;整个script标签或者是一个单独…