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

PTA A1067 Sort with Swap(0, i)理解思路(如何记录与交换) 核心理解点 题目的意思是每次只能用0和另一个数进行交换。 所以这里想的是,尽可能每次都往正确的位置上换。 所以,一个数组,谁来作为键,谁来作为值,就很重要了。这里要交换,数字是不变的,变化的是数字的位置,所以,用一个for循环,可以把初始的位置,以值得形式记录下来。 关于交换得误区 比如,一开始0的位置是7,这个位置7的正确值应该是数字7,所以,0要和7交换位置。交换之后,数字7就归位... 阅读详情

将 { 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<bits/stdc++.h>
 
using namespace std;
typedef long long ll;
const ll N = 2e5 + 10;
ll n;
ll ans, idx, flag, step;
ll a[N]; //记录每个点的数字
ll vis[N]; //记录这个点是否出现在其他环过
 
int main() {
    cin >> n;
    for (ll i = 0; i < n; i++)cin >> a[i];
    for (ll i = 0; i < n; i++) {
        if (!vis[i] && a[i] != i) {
            flag = 0;//判断这个环里是否有0
            idx = i;//环的起点
            step = 0;//记录步数
            while (!vis[idx]) {
                if (!a[idx])flag = 1;//环里有0,则 flag 标注为 1
                vis[idx] = 1;
                idx = a[idx];
                step++;
            }
            if (flag)ans += step - 1;
            else ans += step + 1;
        } else vis[i] = 1;
    }
    cout << ans << endl;
}
Nestjs框架: 集成 Prisma NestJS官方文档提供了两种数据库相关的内容:Techniques下的数据库板块和Recipes下的具体数据库集成方案。本文以Prisma为例,演示了如何集成Prisma到NestJS项目中。首先创建NestJS项目并安装Prisma,配置MySQL数据库连接。通过Prisma CLI初始化项目、定义数据模型并生成迁移文件。接着创建Prisma模块和服务,配置Prisma客户端连接数据库。最后在控制器中注入PrismaService实现数据查询。整个过程包含了Docker启动MySQL、Prisma模型定 阅读详情

相关推荐

知识导航神器:Obsidian Breadcrumbs 插件全攻略

Parent: 插件Child: Breadcrumbs 用法这样,它就能识别出你和其他笔记的关系。

m0_73735578的博客 1629

案例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

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 556

排序之与零交换

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

笔记 864

ARM一致性总线CMN600AE

是基于Mesh拓扑结构,对外支持AMBA CHI/ACE-LITE等接口,内部改用路由结构转发数据,并提供硬件一致性和系统缓存,还支持多芯片互联。CMN600在T16FFC上可以做到2Ghz,另外AE版本增加了车规芯片的安全功能,总线内部采用EDC检查,接口采用的奇校验。CMN-600AE具有以下特点:该网络符合功能安全标准,例如ISO 26262(汽车电子领域的功能安全标准)或IEC 61508(工业自动化领域的功能安全标准)等。

weixin_50518899的博客 3501

VisionMaster4.2.0与C#控件开发实战:从入门到精通的完整指南

本文详细介绍了VisionMaster4.2.0与C#控件开发的实战指南,从基础环境搭建到核心控件使用,再到高级功能实现。通过VmFrontendControl、VmGlobalToolControl等核心控件的深入解析,帮助开发者快速掌握机器视觉应用开发技巧,提升开发效率。特别适合需要集成VisionMaster4.2.0 SDK进行视觉系统开发的C#程序员。

weixin_42665725的博客 383

PTA 与零交换

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

xjc1481612876的博客 340

Android性能分析——hprof文件分析(一)

hprof  文件是 Java 堆转储文件(Heap Dump File)的标准格式,用于保存 Java 虚拟机(JVM)在某个时间点的内存快照。这种文件对于分析内存泄漏、内存使用情况和对象分配模式非常有用。

小旭的专栏 1877

PTA | 与零交换

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

2201_75933169的博客 587

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2313

从 Integrated Configuration 到 Integration Flow,SAP PI/PO 老配置迁移的一次温和重构

很多还在运行 SAP PI/PO 的系统,Integration Directory 里都积累了不少 Integrated Configuration,也就是日常项目里常说的 ICO。它们可能稳定运行了多年,负责把采购订单、物料主数据、客户主数据、发票、发货通知从一个系统送到另一个系统。问题在于,ICO 这种对象很实用,却不够直观。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 95

PTA与零交换

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

halation_Z的博客 615

Test-Time Adaptation Induces Stronger Accuracy and Agreement-on-the-Line

TTA不管是否提高了OOD的泛化性都增强了线性的趋势,TTA的初始目的是为了增强OOD的表现,一个人可能会觉得TTA使得ACL更强的原因是他消除了ID和OOD之间的差距,因此所有模型间ID vs OOD的准确率接近于y=x这条线,但是实际上这个解释不能够反映我们的经验发现,因为虽然TTA将分布之间的偏移简化为一种放缩的分布,但是这个放缩的因子幅值可能很大,也就是α<<1但是r>>1,这就会导致很偏离y=x这条线,而且理论分析也是,虽然ID和OOD的差距很大,但是线性关系还在。

m0_62673638的博客 148

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

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

等风来 441

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

案例7-1.5 与零交换 (25 分)

案例7-1.5 与零交换 (25 分) 组合数学的圈问题,不懂的仔细模拟一下代码。 #include<cstdio> #include<cmath> #include<cstring> #include<iostream> using namespace std; const int N=1e5+10; int a[N],vis[N],ret; void dfs(int x) { if(vis[x]) return; ret++; vis[x]=1;

努力刷题中 410

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

(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 601

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

7-107 与零交换

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

cyh1069247088的博客 1220

0交换排序

import java.util.Arrays; public class SwapWithZeroSort { public static void main(String[] args) { int[] array={2,0,1}; sort(array); System.out.println(Arrays.toString(array)); } //0交换排序 pu

lwtb的博客 2441

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

本节我们来讨论一下对二叉搜索树的删除节点操作。 首先,我们先来研究一下稍微简单一点的问题,如何删除二叉树中的最小值和最大值。 例如上图的这一棵二叉树中,最小值节点和最大值节点都在哪里呢?我们可以很清楚的从图中看出,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万+

PTA 1067(另外做法)

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 operation that is allowed to use? For example, to sort {4, 0, 2...

y2001tm的博客 328
上一篇: 【数据结构 | PTA】懂蛇语
下一篇: 【数据结构 | PTA】根据后序和中序遍历输出前序遍历
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄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、付费专栏及课程。

余额充值