算法-双指针、BFS与图论-1224. 交换瓶子

题目

思路

  1. 可以交换任意两个瓶子,最多n-1次;如果是只能交换相邻的瓶子,那么相当于逆序对的个数(这篇博客是介绍如何计算逆序对的算法:算法篇:逆序对_逆序对算法-CSDN博客)
  2. 本题转换为图论去看:边的连接规则:每个瓶子向它应该在的位置连一条边
  3. 图的特点:有n个点,n条边;每个点的出度和入度为1;初始是一堆环;目标是变成五个自环
  4. 情况一:交换同一个环内的点:必然会裂成两个环(指向交换位置的箭头发生改变,即被交换的数的入度来源发生变化)
  5. 情况二:交换不同环中的点:将两个环合并
  6. 初始k个环,目标是变成n个环,最少n-k次就可以得解;相当与转换求环的个数有多少

代码

n = int(input())
b = list(map(int, input().split()))
# 记录元素是否已被访问
st = [False] * (n + 1)cnt = 0for i in range(0, n):# 如果当前元素尚未被访问if not st[i]:cnt += 1# 从当前位置开始,通过序列b跟踪下一个元素直到回到已访问过的元素或者到达末尾j = iwhile not st[j]:# 标记当前位置已被访问st[j] = True# 更新下一个要访问的位置j = b[j-1]  # 列表索引是从0开始,需要调整为b[j-1]!!!!!# j=3应在的位置上是2,即b[j-1]=2# 输出未访问元素的数量
print(n - cnt)

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

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

相关文章

【数据结构与算法】绪论

目录 一、数据结构研究 二、基本概念和术语 2.1 基本概念 2.2 什么是数据结构? 2.3 数据结构内容 2.4 逻辑结构种类 2.5 存储结构种类 2.6 数据类型和抽象数据类型 三、算法和算法分析 3.1 算法的定义 3.2 算法的特性 3.3 算法设计要求 3.4 算法好坏评…

JAVA虚拟机实战篇之GC调优[1](GC调优基知、方法、工具和常见GC模式)

文章目录 版权声明GC调优概念GC调优核心指标(KPI)吞吐量延迟(Latency)内存使用量 GC调优方法GC调优步骤GC调优工具jstat工具visualvm插件Prometheus Grafana GC日志分析GC日志保存GC日志分析工具GC ViewerGCeasy 常见的GC模式正常情况缓存对象过多情况内…

01_electron入门

由于毕业论文可能需要用 electron,所以 Linux 驱动学习慢了下来。 一、安装 node.js 进入 node.js 官网:Node.js (nodejs.org) 咱们就是用稳定版,安装包除了安装路径自己选择外,一直点 Next。 安装完成后需要配置环境&#xff0c…

如有Kata

养成跑步的习惯,就能习惯性跑步,一有空就见缝插针抽空跑步。这是一层韵律感、完成感、美感、成就感。而一次跑步的一连串动作,是另一层韵律感、完成感、美感、成就感。所以这里就有了两层的韵律感、完成感、美感、成就感。如是如水漂荡漾。健…

【机器学习】一文掌握逻辑回归全部核心点(下)。

逻辑回归核心点-下 1、引言2、逻辑回归核心点2.5 特征工程2.5.1 特征缩放2.5.2 多项式特征 2.6 多分类2.6.1 一对多(One-vs-Rest,OvR)策略2.6.2 一对一(One-vs-One,OvO)策略2.6.2 比较 2.7 评估指标2.7.1 准…

动手做一个最小RAG——TinyRAG

Datawhale干货 作者:宋志学,Datawhale成员 大家好,我是不要葱姜蒜。 接下来我会带领大家一步一步地实现一个简单的RAG模型,这个模型是基于RAG的一个简化版本,我们称之为Tiny-RAG。Tiny-RAG是一个基于RAG的简化版本&am…

SpringBoot源码

SpringBoot核心前置内容 1.Spring注解编程的发展过程 1.1 Spring 1.x 2004年3月24日,Spring1.0 正式发布,提供了IoC,AOP及XML配置的方式。 在Spring1.x版本中提供的是纯XML配置的方式,也就是在该版本中必须要提供xml的配置文件…

八、词嵌入语言模型(Word Embedding)

词嵌入(Word Embedding, WE),任务是把不可计算、非结构化的词转换为可以计算、结构化的向量,从而便于进行数学处理。 一个更官方一点的定义是:词嵌入是是指把一个维数为所有词的数量的高维空间(one-hot形式…

小迪安全36WEB 攻防-通用漏洞XSS 跨站MXSSUXSSFlashXSSPDFXSS

#XSS跨站系列内容:1. XSS跨站-原理&分类&手法 XSS跨站-探针&利用&审计XSS跨站另类攻击手法利用 XSS跨站-防御修复&绕过策略 #知识点: 1、XSS 跨站-原理&攻击&分类等 2、XSS 跨站-MXSS&UXSS&FlashXss&PDFXSS 等 1、原…

HCS-华为云Stack-计算节点内部网络结构

HCS-华为云Stack-计算节点内部网络结构 图中表示的仅为计算节点是两网口的模式,如果是四网口模式,系统会再自动创建一个网桥出来 图中未画出存储平面和Internal Base平面,它们和tunnel bearing、External OM-样,都是通过trunk0的…

信息系统项目管理师006:车联网(1信息化发展—1.2现代化基础设施—1.2.3车联网)

文章目录 1.2.3 车联网1.体系框架2.链接方式3.场景应用 记忆要点总结 1.2.3 车联网 车联网是新一代网络通信技术与汽车、电子、道路交通运输等领域深度融合的新兴产业形态。智能网联汽车是搭载先进的车载传感器、控制器、执行器等装置,并融合现代通信与网络技术&…

Linux常用命令之top监测

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用 for let arr [2, 4, 6, 56, 7, 88];//for for (let i 0; i < arr.length; i) {console.log(i : arr[i]) //0:2 1:4 2:6 3:56 4:7 5:88 }普通的for循环可以用数组的索引来访问或者修改…

代码随想录day32 Java版

62.不同路径 public static int uniquePaths(int m, int n) {int[][] dp new int[m][n];//初始化for (int i 0; i < m; i) {dp[i][0] 1;}for (int i 0; i < n; i) {dp[0][i] 1;}for (int i 1; i < m; i) {for (int j 1; j < n; j) {dp[i][j] dp[i-1][j]dp…

Java享元模式源码剖析及使用场景

享元模式 一、介绍二、基本原理三、企业资源管理系统中使用案例三、Java 中的字符串常量池使用了享元模式四、总结优缺点以及使用经验 一、介绍 享元模式是一种结构型设计模式&#xff0c;旨在最大程度地减少内存使用或计算开销。这种模式通过共享对多个类似对象实例所需的状态…

04 数据结构之队列

循环队列 /* squence_queue.h */ #ifndef _SQUENCE_QUEUE_H_ #define _SQUENCE_QUEUE_H_#include <stdio.h> #include <string.h> #include <stdlib.h>#define QUEUE_SIZE 128 #define DEBUG(msg) \printf("--%s--, %s", __func__, msg)typedef i…

SAP BTP Hyperscaler PostgreSQL都有哪些Performance监控 (一)

前言 SAP BTP云平台中&#xff0c;除了自身的HANA数据库作为首选以外&#xff0c;它还支持PostgreSQL的整套服务&#xff0c;并以PaaS的形式提供给客户。你可以按照实例为单位进行购买申请不同标准规格的PG实例&#xff0c;然后构建自己的业务逻辑。Hyperscaler是这套产品或方…

【Python-Docx库】Word与Python的完美结合

今天给大家分享Python处理Word的第三方库&#xff1a;Python-Docx。 什么是Python-Docx&#xff1f; Python-Docx是用于创建和更新Microsoft Word&#xff08;.docx&#xff09;文件的Python库。 日常需要经常处理Word文档&#xff0c;用Python的免费第三方包&#xff1a;Pyt…

【Linux】Shell及Linux权限

Shell Shell的定义 Shell最简单的定义是&#xff1a;命令行解释器。 Shell的主要任务&#xff1a;1. 将使用者的命令翻译给核心进行处理。2.将核心的处理结果翻译给使用者 为什么要有Shell? 使用者和内核的关系就相当于两个完全陌生的外国人之间的关系&#xff0c;他们要进…

springboot、vue、uniapp项目的部署和运行(超链接可直接跳过去)

springboot、vue项目环境配置 1、首先要安装jdk、maven、mysql、nodejs 软件安装 2、安装idea、HbuilderX、navicat 运行项目 3、运行springboot项目、运行vue项目、运行uniapp项目