题目:

一个整数组里包含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.

(笔试题)和0交换的排序相关推荐

  1. C/C++笔试题(12)

    香港电信笔试题     1. Based on your understanding of the following java related technologies: servlets, Jav ...

  2. 46家公司面试笔试题

    Sony笔试题 1.完成下列程序 * *.*. *..*..*.. *...*...*...*... *....*....*....*....*.... *.....*.....*.....*.... ...

  3. 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦(第271-330题) 引言 此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最 ...

  4. 建议收藏|四大互联网经典链表笔试题

    猫哥导读:随着大数据行业的发展,求职的道路上也会略显坎坷,公司对员工的要求也会越来越高,如果你在面试的路上没有碰壁过,只能说你太幸运了,我身边的朋友,基本上都会遇到面试失败的情况,大多数技术牛人都卡在 ...

  5. 十月下旬腾讯,网易游戏,百度盛大迅雷校园招聘笔试题集锦(10.25)

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦 引言 笔试啊,笔试,面试啊,面试,找工作啊,找工作.此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网 ...

  6. 十月下旬腾讯 网易游戏 百度迅雷校园招聘笔试题集锦 第271 330题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 十月下旬 ...

  7. 【笔试题】简单的两道笔试题(1、打印杨辉三角;2、三个数排序)

    笔试题 简单的两道笔试题(1.打印杨辉三角:2.三个数排序) 1.打印杨辉三角 import java.util.Scanner; public class MyYanghuiTriangle {pu ...

  8. 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小

    2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小. 我的大致思路是把这个整型数组转换成String数组,然后通过String类的compareTo方 ...

  9. 前端笔试题【1】--从字符串的第二个字符开始对数组进行排序

    前一段时间做过一个阿里的前端笔试题:从字符串的第二个字符开始对数组进行排序.当时没想到简单的方法,这几天看书才发现sort()还可以自定义一个比较函数,郁闷啊啊啊~~ 看来基础还是不够扎实啊, 赶紧记 ...

最新文章

  1. stm32通用定时器的PWM输出
  2. 想让进程后台运行,试试Linux的nohup命令,3分钟学会。
  3. C#.Net命名空间大纲
  4. 阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...
  5. leetcode183. 从不订购的客户(SQL)
  6. 第三章 MongoDb Java应用 3.2
  7. 语音识别技术应用领域介绍
  8. FAILED Execution Error, return code 2 from org
  9. 苹果CMSv10新手入门安装必看教程
  10. SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价
  11. Android传感器之光线传感器介绍
  12. Exp9 Web安全基础 20164302 王一帆
  13. 基于SSM+Vue的邮票管理系统的设计与实现Java邮票分享系统邮票鉴定前后端分离(源码调试+讲解+文档)
  14. 主板BIOS被破坏时的解决方法
  15. 呼叫中心静态座席的配置
  16. python判断回文序列_怎么用python3代码检查回文序列?
  17. 重新做计算机老师的说说,说说我们电脑班老师 ── 刁元清
  18. 文凯博士出席2021珠海全国高性能计算机学术年会
  19. 干货分享:智慧工厂时代下大数据 + 智能的深度实践
  20. Office应用显示应用程序无法正常启动(0xc0000142)时,采用的解决办法。亲测有效!

热门文章

  1. 《Swift开发实战》——第1章,第1.4节启动iOS 8模拟器
  2. C#实现清理系统内存
  3. 查看某个端口是否链接超时
  4. 【转】你没有变强是因为你一直很舒服
  5. Linux 学习_在Linux下面安装tomcat
  6. GAE 随机获取实体
  7. 《WinForm开发系列之高级篇》Item2 TCP异步传输
  8. css判断不同分辨率显示不同宽度布局实现自适应宽度
  9. PHP yii 框架源码阅读(二) - 整体执行流程分析
  10. iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度