当前位置: 首页 > news >正文

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目:有 N 个瓶子,编号 1 ~ N,放在架子上。

比如有 5 个瓶子:

2 1 3 5 4

要求每次拿起 2 个瓶子,交换它们的位置。

经过若干次后,使得瓶子的序号为:

1 2 3 4 5

对于这么简单的情况,显然,至少需要交换 2 次就可以复位。

如果瓶子更多呢?你可以通过编程来解决。

输入描述

输入格式为两行:

第一行: 一个正整数 N (N<104), 表示瓶子的数目

第二行: N个正整数,用空格分开,表示瓶子目前的排列情况。

输出描述

输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。

输入输出样例

示例

输入

5
3 1 2 5 4

输出

3

解题思路+代码:

代码:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {/**思路:冒泡排序1.读取输入的N个瓶子存放进数组2.遍历输入的N个瓶子,再利用数组进行冒泡排序交换,记录交换的次数*/Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] arr = new int[n+1]; //防止边界溢出//遍历输入的N个瓶子存放到数组arrfor(int i = 1;i<=n;i++){arr[i] = scan.nextInt();}//记录需要交换的次数int count = 0;//遍历输入的N个瓶子for(int i = 1 ;i<=n;i++){while(arr[i] != i) {int temp = arr[i];//辅助变量//进行交换arr[i] = arr[temp];arr[temp] = temp;count++;}}System.out.println(count);scan.close();}
}

 总结:这道题需要理解题目中的两两交换排序就是冒泡排序,知道是冒泡排序的解法调动学过的数组知识,在理清交换的逻辑就可以很好地解答该题了。


http://www.mrgr.cn/news/91931.html

相关文章:

  • C++17中std::chrono::duration和std::chrono::time_point的舍入函数
  • DPVS-1:编译安装DPVS (ubuntu22.04)
  • 23. AI-大语言模型-DeepSeek简介
  • 安全运维,等保测试常见解决问题。
  • DeepSeek与ChatGPT:会取代搜索引擎和人工客服的人工智能革命
  • 二级公共基础之数据结构与算法篇(七)排序技术
  • 如何在 SpringBoot 项目使用 Redis 的 Pipeline 功能
  • Java File 类
  • GCC头文件搜索顺序详解
  • OpenBMC:BmcWeb实例化App
  • 【Linux】HTTP:Cookie 和 Session 详解
  • PySide6学习专栏(四):用多线程完成复杂计算任务
  • 在windows下安装windows+Ubuntu16.04双系统(上)
  • 计算机网络之物理层——基于《计算机网络》谢希仁第八版
  • seacmsv9 SQL注入漏洞(报错注入)
  • react hook useReducer
  • LeetCode 501.二叉搜索树中的众数
  • uniapp h5端和app端 使用 turn.js
  • Spring面试题2
  • 【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字