(笔试题)和0交换的排序

题目:

一个整数组里包含0-(n-1)的排列 (0到(n-1)恰好只出现一次),如果每次只允许把任意数和0交换,求排好顺序至少交换多少次。

思路:

这是组合数学中的圈问题,可以把数组中的位置关系看成图的拓扑关系。

例如A[3]={2,0,1},2在0的位置,0在1的位置,1在2的位置,那么把它们画成图的拓扑结构的话,就是一个环(圈),即2->0->1->2。

这样的条件(排列成环(圈))用文字描述为:1、位置和位置上的数字或字符存在一一对应关系;2、每个数字或字符都不在自己应有的位置上;

上例我们通过交换1和0,再交换2和0,即可正确排序,次数为2.

一个排序总可以划分为不同的环(圈),独立成圈的不需要交换;

总结满足上述条件的规律:

  • 一个长度为m的圈,如果包含0,则交换(m -1)次可以恢复所有的数到原位
  • 一个长度为m的圈,如果不包含0,则交换(m+ 1) 次可以恢复所有的数到原位

代码:

#include <iostream>using namespace std;int circle(int A[],bool isvisited[],int x){int count=0;while(!isvisited[x]){count++;isvisited[x]=true;x=A[x];}if(count==0)return 0;elsereturn count-1;
}int main()
{int A[]={1,3,2,4,6,5,0};int n=sizeof(A)/sizeof(A[0]);bool isvisited[n];for(int i=0;i<n;i++)isvisited[i]=false;int count=0;for(int i=0;i<n;i++){count+=circle(A,isvisited,A[i]);}cout << count << endl;return 0;
}

运行结果:

4

该数组划分为3个圈,其中2和5独立成圈,无需交换,而其他五个数成圈,1->3->4->6->0->1,交换次数为5-1=4.

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

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

相关文章

pytorch 加载模型_福利,PyTorch中文版官方教程来啦(附下载)

PyTorch 中文版官方教程来了。PyTorch 是近期最为火爆的深度学习框架之一&#xff0c;然而其中文版官方教程久久不来。近日&#xff0c;一款完整的 PyTorch 中文版官方教程出炉&#xff0c;读者朋友从中可以更好的学习了解 PyTorch 的相关细节了。教程作者来自 pytorchchina.co…

为什么睡觉时身体突然抖一下?答案吓到我了!

全世界只有3.14 % 的人关注了爆炸吧知识不知你有没有过这样的经历&#xff1a;即将进入甜美梦乡&#xff0c;突然就像触电般地抖了一下&#xff0c;或者不由自主猛地踢一下&#xff0c;瞬间被惊醒&#xff01;这到底是啥情况&#xff1f;网上的答案五花八门&#xff1a;有人说缺…

Dapper防sql注入,同一条SQL支持多种数据库

前言防SQL注入&#xff0c;常用的方案是使用Dapper执行SQL的参数化查询。例如&#xff1a;using (IDbConnection conn CreateConnection()) {string sqlCommandText "SELECT * FROM USERS WHERE IDID";Users user conn.Query<Users>(sqlCommandText, new { …

java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制

java编程思想_007打印二进制,八进制,十六进制package wzs.test2;//打印二进制,八进制,十六进制public class Test{public static void main(String[] args){System.out.println("0-20二进制.");for (int i 0; i < 20; i){System.out.print(i ":" Int…

基于css3的鼠标滑动按钮动画之CSS--续

2019独角兽企业重金招聘Python工程师标准>>> btn2 /*--按钮1--*/ .container1 {width:200px;display:block;margin:20px auto;position:relative;font-family:droid arabic kufi; } .con_down1 {display:block;cursor:pointer;background-color:#F6EB96;width:190px…

rabbitmq入门_Rabbit MQ 入门

Rabbit MQ是一个通用的消息中间件&#xff0c;支持AMQP&#xff0c;STOMP&#xff0c;MQTT等多种协议安装#在OSX下可以使用如下命令来安装 rabbitmqbrew install rabbitmq基本命令#ls -al ~/rabbitmq/3.7.14/sbin/total 1104drwxr-xr-x 10 jet admin 320 May 19 14:35 .d…

HDOJ1860 ( 统计字符 ) 【水题】

Problem : 1860 ( 统计字符 ) Judge Status : AcceptedRunId : 5940488 Language : C Author : qq1203456195Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta 1 #include <stdio.h>2 #include <string.h>3 char f[6],c[81];4 in…

94年出生,她们如今都是985高校博士生导师!

全世界只有3.14 % 的人关注了爆炸吧知识鱼羊 萧萧 发自 凹非寺量子位 报道 | 公众号 QbitAI94年出生、博士研究方向与材料相关、目前都成了985重点高校的博士生导师。拥有相同经历的两个女生&#xff0c;概率有多大&#xff1f;就在今年&#xff0c;26岁的夏娟和李晟曼&#xf…

IBM沃森为存储系统开发人员带来的启发

前一段时间&#xff0c;IBM 沃森参加了CBS的益智节目《危险边缘》(Jeopardy)&#xff0c;这是他在全国观众面前首次亮相。确切地说&#xff0c;站在中央舞台选手答题台后面的IBM沃森实际上 是不断闪烁的虚拟头像。尽管如此&#xff0c;摆在沃森面前的答题按钮却是如假包换的&am…

01Prism WPF 入门实战 - 项目准备

1.概要这一系列将进行PrismWPF技术的实战讲解。实战项目内容选型为Email邮件收发的客户端&#xff08;WeMail&#xff09;&#xff0c;项目结构简单方便大家理解。相关技术&#xff1a;C#、WPF、Prism软件开发环境&#xff1a;VS2019 、 .NET5 、 windows11需掌握技能&#xf…

php上传文件程序,php 文件上传程序(二款简单文件上传程序)_PHP教程

if(!$uploadaction):?>文件上载界面else:?>文件上载代码$uploadaction0;echo "good!";$timelimit60; /*设置超时限制时间 缺省时间为30秒 设置为0时为不限时 */set_time_limit($timelimit);if(($uploadfile !"none" )){$uploadpathaddslashes(dirn…

预定义变量 - PHP手册笔记

原文:预定义变量 - PHP手册笔记预定义变量将所有的外部变量表示成内建环境变量&#xff0c;并且将错误信息表示成返回头。超全局变量是在全部作用域中始终可用的内置变量。在函数或方法中无需执行global $variable&#xff0c;就可以访问它们。 $GOBALS引用全局作用域中可用的全…

redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

点击上方小伟后端笔记关注公众号每天阅读Java干货文章熟悉Redis的同学应该知道&#xff0c;Redis的每个Key都可以设置一个过期时间&#xff0c;当达到过期时间的时候&#xff0c;这个key就会被自动删除。在为key设置过期时间需要注意的事项1、 DEL/SET/GETSET等命令会清除过期时…

Hadoop学习系列之PageRank

昨晚上不想做其他的事&#xff0c;突然想起来好久都没更新博客了&#xff0c;shell也差不多学完了&#xff0c;只不过学习的时候都是只带着书出去了&#xff0c;改天总结总结。Hadoop么&#xff0c;黄宜华老师讲完了&#xff0c;自己也马马虎虎快学完了&#xff0c;也是没总结&…

您的屁股发热严重,请降温后使用。

▲ 点击查看不是坐在办公椅上的屁股都渴望自由&#xff0c;而是——最近天越来越热&#xff0c;屁股捂在椅子上&#xff0c;既不散热也不排汗&#xff0c;比戴口罩闷出痱子还难受&#xff0c;实在是坐不住。。最尴尬的就是站起来裤子时常黏在屁股缝里&#xff0c;难不成每次还要…

C# 正则表达式编写及验证方法

01—前言正则表达式应用很广泛&#xff0c;应该大多人都接触过了&#xff0c;这个语法规则既多又凌乱&#xff0c;每次用的时候都得重新看一遍语法&#xff0c;真的是让人头疼啊&#xff01;但是实际上我们并不要掌握很多的符号用法规则&#xff0c;牢记最常用的几个就能应付很…

Domino Web开发规则之二:DOMINO与开发相关的管理规范

1.服务器HTTP优化设置 调整活动线程数&#xff0c;HTTP服务器可以同时处理的请求数&#xff0c;而非连接数、会话数 单CPU服务器<64 多CPU服务器<80 并发运行Web代理 确保Web代理是线程安全的情况下&#xff0c;可以启用来提高性能。 服务器文档-> Internet协议 ->…

python从入门到爬虫_python爬虫从入门到放弃(一)之初识爬虫

什么是爬虫&#xff1f;网络爬虫(又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者)&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟…

Linq-语句之Select/Distinct和Count/Sum/Min/Max/Avg

上一篇讲述了LINQ&#xff0c;顺便说了一下Where操作&#xff0c;这篇开始我们继续说LINQ to SQL语句&#xff0c;目的让大家从语句的角度了解LINQ&#xff0c;LINQ包括LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML&#xff0c;但是相对来说…

【HDU】2795 Billboard

1 #include<cstdio>2 #define MAXN 2000103 #define MIN(a,b) ((a)>(b)?(b):(a))4 #define MAX(a,b) ((a)>(b)?(a):(b))5 int w,tree[MAXN<<2];6 inline void PushUp(int rt)7 {8 tree[rt]MAX(tree[rt<<1],tree[rt<<1|1]);9 } 10 void Bui…