news 2026/4/18 3:34:42

hh的蓝桥杯每日一题(交换瓶子)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hh的蓝桥杯每日一题(交换瓶子)

15.交换瓶子 - 蓝桥云课

方法一:贪心做法

  • 对于位置 i,如果 a[i] ≠ i

  • 就把 a[i] 和 a[a[i]] 交换(把当前数字放到它应该去的位置)

  • 这样每次交换都能让至少一个数字归位

  • 重复直到 a[i] = i

#include<iostream> using namespace std; const int N = 10010; int n; int a[N]; int main() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i]; } int ans = 0; // 贪心:直接把每个数放到正确位置 for(int i = 1; i <= n; i++) { while(a[i] != i) { // 如果当前位置的数不对 swap(a[i], a[a[i]]); // 把它和它应该在的位置交换 ans++; } } cout << ans << endl; return 0; }

方法二:利用环的性质(交换排序最小交换问题)

这个问题实际上可以转化为图论中的环分解问题

  • 把排列看作一个置换(permutation)

  • 每个元素应该回到它的正确位置(值 i 应该在位置 i)

  • 通过交换操作,我们可以将排列分解为若干个环

  • 最小交换次数 = 所有环的大小之和 - 环的个数

#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 10010; // 题目说 N<10000,所以开大一点 int n; int a[N]; bool st[N]; // 标记数组,记录位置是否访问过 int main() { cin >> n; for(int i = 1; i <= n; i++) // 注意:题目瓶子编号从1开始 { cin >> a[i]; } int ans = 0; // 遍历所有位置 for(int i = 1; i <= n; i++) { // 如果当前位置的值不是 i,且没有被访问过 if(a[i] != i && !st[i]) { // 找到当前元素所在的环 int j = i; int cnt = 0; // 环的大小 while(!st[j]) { st[j] = true; // 标记已访问 j = a[j]; // 跳到这个位置应该放的元素的位置 cnt++; } // 环的大小为 cnt,需要 cnt-1 次交换 ans += (cnt - 1); } } cout << ans << endl; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:27:22

JLink烧录器使用教程:STM32 Flash编程操作指南

JLink烧录实战全指南&#xff1a;从零掌握STM32 Flash编程核心技巧你有没有遇到过这种情况——代码改了几十遍&#xff0c;每次用串口ISP下载都要等十几秒&#xff0c;开发效率被卡得死死的&#xff1f;或者产线批量烧录时&#xff0c;原厂工具速度慢、稳定性差&#xff0c;良率…

作者头像 李华
网站建设 2026/4/18 3:29:33

实验一 Python开发环境语法基础

实验一 Python开发环境&语法基础一、实验基本原理运用Anaconda搭建的Jupyter notebook平台编写实例Python程序。二、实验目的1、熟悉Python集成开发系统背景。2、熟悉Jupyter Notebook开发环境。3、熟悉编写程序的基本过程。三、具体要求1、熟悉Python的基本语法&#xff0…

作者头像 李华
网站建设 2026/4/18 3:32:34

eide环境下GD32固件下载失败问题全面讲解

eIDE烧录GD32失败&#xff1f;从底层机制到实战排错的全链路技术拆解你有没有遇到过这样的场景&#xff1a;代码编译通过&#xff0c;接线看似没问题&#xff0c;点击“Download”按钮后却弹出一串红字——“Target Not Responding”、“Connection Failed”或干脆卡在“Connec…

作者头像 李华
网站建设 2026/4/12 13:55:08

深入 Yak 语言高级编程:异步并发与延迟执行实践

深入Yak语言高级编程&#xff1a;异步并发与延迟执行实践 前言 Yak语言作为一款面向网络安全领域的动态编程语言&#xff0c;凭借其轻量、高效的特性&#xff0c;在渗透测试、漏洞挖掘等场景中得到了广泛应用。对于安全从业者而言&#xff0c;编写高性能的自动化脚本往往需要依…

作者头像 李华
网站建设 2026/3/14 8:06:02

常用注解有哪些?(@Configuration, @Bean, @Autowired, @Value等)

Spring Boot 常用注解详解一、核心注解分类1. 配置类注解Configuration用途&#xff1a;声明一个类为配置类&#xff0c;相当于XML配置文件特点&#xff1a;会被CGLIB代理&#xff0c;确保Bean方法返回单例Configuration public class AppConfig {// 内部可以定义Bean方法 }Bea…

作者头像 李华
网站建设 2026/3/28 8:37:38

AI应用架构师从0到1:AI虚拟培训项目的团队协作与角色分工

AI应用架构师从0到1:AI虚拟培训项目的团队协作与角色分工 1. 引入与连接 1.1 引人入胜的开场 想象一下,在未来的职场中,新员工无需再在冗长的线下培训课堂中昏昏欲睡,而是戴上虚拟现实(VR)设备,瞬间置身于高度仿真的工作场景中,与栩栩如生的虚拟导师进行互动,接受定…

作者头像 李华