每日一题(小白)暴力娱乐篇23

由题意得知给我们一串数字,我们每次交换两位,最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考,加入给你一串数字获得最少的交换次数,意味着你的交换后续基本不会变,比如说2 1 3 5 4 中1与2交换后不变,4与5交换后不变。而且已知给出的数字必定和下标顺序一致,那么我们可以更换数字直到它和对应下标相同即可得到结果。

①数组接收数据

②循环遍历数组,和下标不对应就进行更换直到对应下标相同

③找到对应下标的数字后交换两个数字

④每次交换使用计数器加1

⑤输出计数器结果

代码如下👇

复制代码
	public static void main(String[] args) {
			Scanner scan=new Scanner(System.in);
		    int n=scan.nextInt();
		    int[] arr=new int[n+1];
		    for (int i = 1; i <= n; i++) {
				arr[i]=scan.nextInt();
			}
		    int count=0;
		    for (int i = 1; i <= n; i++) {//遍历数组
				while(arr[i]!=i) {//r如果位置不对,一直更换到位置对
					int temp=arr[arr[i]];
					arr[arr[i]]=arr[i];
					arr[i]=temp;
					++count;
				} 
				for (int j = 1; j < arr.length; j++) {
				System.out.print(arr[j]+" ");//测试
			}
				System.out.println();//测试
			}
		    System.out.println(count);
		  
		    
			scan.close();
    }

	public static void swap(int a,int b) {
		int temp=0;
		temp=a;
		a=b;
		b=temp;
	}

交换代码如上,如果觉得第一个代码比较复杂可以看一下图示,或者写一个全局方法。

相关推荐
掘金-我是哪吒几秒前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
飞翔的佩奇9 分钟前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统
阿蒙Amon9 分钟前
C#扩展方法全解析:给现有类型插上翅膀的魔法
开发语言·c#
RainbowSea26 分钟前
跨域问题(Allow CORS)解决(3 种方法)
java·spring boot·后端
掘金-我是哪吒28 分钟前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
RainbowSea31 分钟前
问题 1:MyBatis-plus-3.5.9 的分页功能修复
java·spring boot·mybatis
尘浮72833 分钟前
60天python训练计划----day59
开发语言·python
前端 贾公子34 分钟前
monorepo + Turborepo --- 开发应用程序
java·前端·javascript
三维重建-光栅投影1 小时前
VS中将cuda项目编译为DLL并调用
算法
Chef_Chen1 小时前
从0开始学习R语言--Day39--Spearman 秩相关
开发语言·学习·r语言