【PTA数据结构 | C语言版】与零交换

案例7-1.5 与零交换 (25分) 将 { 0, 1, 2, …, N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序: Swap(0, 1) ⟹ { 4, 1, 2, 0, 3 } Swap(0, 3) ⟹ { 4, 1, 2, 3, 0 } Swap(0, 4) ⟹ { 0, 1, 2, 3, 4 } 本题要求你找出将前 N 个非负整数 阅读详情

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

题目

将 { 0, 1, 2, …, n−1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序:

  • Swap(0, 1) ⟹ { 4, 1, 2, 0, 3 }
  • Swap(0, 3) ⟹ { 4, 1, 2, 3, 0 }
  • Swap(0, 4) ⟹ { 0, 1, 2, 3, 4 }

本题要求你找出将前 n 个非负整数的给定排列进行增序排序所需要的最少的与 0 交换的次数。

输入格式:
输入在第一行给出正整数 n (≤10^5);随后一行给出{ 0, 1, 2, …, n−1 } 的一个排列。数字间以空格分隔。

输出格式:
在一行中输出将给定序列进行增序排序所需要的最少的与 0 交换的次数。

输入样例:
10
3 5 7 2 6 4 9 0 8 1

输出样例:
9

代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n;
    scanf("%d", &n);
    
    int *arr = (int *)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    
    int *visited = (int *)calloc(n, sizeof(int));  // 标记元素是否已处理
    int total_swaps = 0;
    
    for (int i = 0; i < n; i++) {
        if (!visited[i] && arr[i] != i) {  // 找到未处理的循环
            int cycle_len = 0;
            int current = i;
            int has_zero = 0;  // 标记循环中是否包含0
            
            // 遍历当前循环
            while (!visited[current]) {
                visited[current] = 1;
                cycle_len++;
                if (arr[current] == 0) {
                    has_zero = 1;
                }
                current = arr[current];  // 移动到下一个元素
            }
            
            // 根据循环是否包含0计算交换次数
            if (has_zero) {
                total_swaps += (cycle_len - 1);
            } else {
                total_swaps += (cycle_len + 1);
            }
        }
    }
    
    printf("%d\n", total_swaps);
    
    return 0;
}
STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统 在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为 阅读详情

相关推荐

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5058

案例7-1.5:与零交换

将 { 0, 1, 2, …, N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序: Swap(0, 1) ⟹ { 4, 1, 2, 0, 3 } Swap(0, 3) ⟹ { 4, 1, 2, 3, 0 } Swap(0, 4) ⟹ { 0, 1, 2, 3, 4 } 本题要求你找出将前 N 个非负整数的

m0_51717226的博客 2009

R语言pls包实战:手把手教你用偏最小二乘(PLS)搞定高维数据回归(附完整代码与数据标准化避坑指南)

本文详细介绍了如何使用R语言的pls包进行偏最小二乘(PLS)回归分析,特别针对高维数据回归问题。通过完整的代码示例和数据标准化避坑指南,帮助读者掌握从数据预处理到模型优化的全流程,解决实际应用中的常见问题。

weixin_42662605的博客 350

排序之与零交换

将 { 0, 1, 2, ..., N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。首先找到0所在位置,然后找该位置应该放的数所在的位置,然后交换这两个位置上的数,有一种情况需要特别判断,当0所在位置为0的位置时,随便找一个位置不正确的数所在位置进行交换。输入在第一行给出正整数 N (≤105);随后一行给出{ 0, 1, 2, ..., N-1 } 的一个排列。

笔记 864

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2388

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

PTA 与零交换

将 { 0, 1, 2, ..., N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。本题要求你找出将前 N 个非负整数的给定排列进行增序排序所需要的最少的与 0 交换的次数。

xjc1481612876的博客 340

2025资源从哪里来!

研究网络通信中的安全问题,如VLAN划分、路由协议(静态、动态如OSPF、BGP)、NAT转换、AAA认证、访问控制列表(ACL)等。‌Wi-Fi安全设置‌、‌密码破解原理‌(仅用于合法测试或教育目的)、‌常见Web安全问题‌如SQL注入、XSS跨站脚本攻击等的防范措施。在这个网站你可以找到你对应的专业-对应的路线-对应的资源-对应的百度网盘里面全是免费的资源------------------惊喜不?‌防火墙配置与策略‌、‌入侵检测与防御系统(IDS/IPS)‌、‌端口扫描与漏洞扫描技术‌等。

qq_56248592的博客 1902

【数据结构 | PTA】与零交换

将 { 0, 1, 2, …, n−1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。输入在第一行给出正整数 n (≤10的5次方);随后一行给出{ 0, 1, 2, …, n−1 } 的一个排列。本题要求你找出将前 n 个非负整数的给定排列进行增序排序所需要的最少的与 0 交换的次数。在一行中输出将给定序列进行增序排序所需要的最少的与 0 交换的次数。

等风来 2053

基于STM32的汽车主门电动窗开关系统设计方案

以下是基于 STM32CubeMX 和 HAL 库的示例代码,可实现基本的功能。

weixin_42300449的博客 995

【YOLO26科研级突破】集成BiFPN双向特征金字塔,让多尺度特征融合效率与精度双跃升

打开确保模型解析器能识别BiFPN模块。通过将BiFPN双向特征金字塔集成到YOLO26中,我们实现了一个“全尺度双向特征流动+加权融合+精准检测”的目标检测模型。这个改进不仅在工程上能大幅提升多尺度、复杂场景下的检测精度,更在科研上提供了“双向特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

LXY_LOVE36的博客 200

PTA | 与零交换

将 { 0, 1, 2, ..., n−1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。输入在第一行给出正整数 n (≤105);随后一行给出{ 0, 1, 2, ..., n−1 } 的一个排列。本题要求你找出将前 n 个非负整数的给定排列进行增序排序所需要的最少的与 0 交换的次数。在一行中输出将给定序列进行增序排序所需要的最少的与 0 交换的次数。

2201_75933169的博客 587

姿态传感器/陀螺仪之LSM6DS3TR-C应用原理图设计

LSM6DS3TR-C是一款由意法半导体(STMicroelectronics)推出的高性能、低功耗的惯性测量单元(IMU),集成了3轴加速度计和3轴陀螺仪,用于测量加速度、角速度以及设备的姿态和运动。

corlin6688的博客 872

数据结构PTA 案例7-1.5 与零交换

案例7-1.5 与零交换题目解法 题目 将 { 0, 1, 2, …, N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序: Swap(0, 1) ⟹ { 4, 1, 2, 0, 3 } Swap(0, 3) ⟹ { 4, 1, 2, 3, 0 } Swap(0, 4) ⟹ { 0, 1, 2, 3, 4

Echooo的博客 1669

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PTA 10-排序6 Sort with Swap(0, i) 贪心法和数环法两种解法对比分析

PTA-mooc完整题目解析及AC代码库:PTA(拼题A)-浙江大学中国大学mooc数据结构全AC代码与题目解析(C语言) Given any permutation of the numbers {0, 1, 2,…, N−1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY op...

zhuiyisinian的博客 287

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(c语言)Sort with Swap(0, i) (25分)

关于数据结构Mooc后的每一道答案 基本我都已经给出了详解 希望能对大家有所帮助 收藏一下也是方便大家查找吧 希望大家一起进步! (c语言)浙大数据结构Mooc作者答案集 原题谷歌翻译 AC运行结果截图 闲谈 终于这道题做了 今天下午就到了 最后的散列表了 回想起这一个多月的数据结构的学习 也快进入尾声了 我去看看我学了多久了 我是从 2020/11/15 09:50:14开始进入PTA做题 差不多快30多天一点了 可能最多还有1天多也就结束课程了 陈越姥姥确实讲的很好 但是我觉得还是

Love 6's Private Blog 602

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

7-29 与零交换(超详细思路解析,其实可以只用数组解)

将 { 0, 1, 2, ..., N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序: Swap(0, 1)⟹{ 4, 1, 2, 0, 3 } Swap(0, 3)⟹{ 4, 1, 2, 3, 0 } Swap(0, 4)⟹{ 0, 1, 2, 3, 4 } 本题要求你找出将前 N 个...

daybreak_alonely的博客 880

PTA与零交换

题目大意:让数组里的数都和0交换位置,问最少需要多少次? 我们可以把环分成3类。1、自环,不需要换位置。2、环中间有0,交换次数为环的长度-1。3、环中间没0,把0放入环中(交换次数+1),环的长度+1,交换次数为环的长度。

halation_Z的博客 615

0交换排序

长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换,完成以下函数 #include &amp;lt;iostream&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;map&amp;gt; #include &amp;lt;unordered_map&amp;gt; #include &amp;lt;set&amp;gt; #include &a

JackZhangNJU的专栏 1951

二分搜索树的删除节点操作

本节我们来讨论一下对二叉搜索树的删除节点操作。 首先,我们先来研究一下稍微简单一点的问题,如何删除二叉树中的最小值和最大值。 例如上图的这一棵二叉树中,最小值节点和最大值节点都在哪里呢?我们可以很清楚的从图中看出,13是该树的最小节点,42是该树的最大节点,且13节点位于树的最左边,而42位于树的最右边,这难道是一种巧合吗?当然不是,首先,让我们来回忆一下二叉树的一个非常重要的性质。

扬俊的小屋 1万+

(未解决 1)与零交换(组合数字问题)

将 { 0, 1, 2, ..., N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序: Swap(0, 1)⟹{ 4, 1, 2, 0, 3 } Swap(0, 3)⟹{ 4, 1, 2, 3, 0 } Swap(0, 4)⟹{ 0, 1, 2, 3, 4 } 本题要求你找出将前 N ...

m0_57422141的博客 217

华为机试题—0交换排序

题目描述: 长度为n的数组乱序存放着0至n-1,现在只能进行0与其他数的交换,完成以下函数。 public class Solution { /** * 交换数组里n和0的位置 * * @param array * 数组 * @param len * 数组长度 * @pa

universe_ant的博客 1万+

7-107 与零交换

收获: 1.与0交换有两个思路:根据下标寻找交换目标,根据值寻找交换目标 2.本质都是计算有向环的节点数

cyh1069247088的博客 1220

编程:0交换排序

长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换,以完成排序。 #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; void swap_with_zero(int *array, int len, int n) { int zIndex = -1; int nIndex = -1; ...

1985

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 197
上一篇: 【PTA数据结构 | C语言版】按秩合并的不相交集操作
下一篇: 【PTA数据结构 | C语言版】德才论
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值