刷题07-排队唱歌

原题链接

题目描述

我们部门要排队唱歌,大家乱哄哄的挤在一起,
现在需要按从低到高的顺序拍成一列,
但每次只能交换相邻的两位,请问最少要交换多少次

输入描述

第一行是N(N<50000),表示有N个人
然后每一行是人的身高Hi(Hi<2000000,不要怀疑,我们以微米计数),持续N行,表示现在排列的队伍

输出描述

输出一个数,代表交换次数。

示例

输入:
6
3
1
2
5
6
4
输出:
4

参考解法:

import java.util.Scanner;
/**
 * 分析题目需求
 * 最终只需求逆序对的数量
 */
public class T_30 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		int a[] = new int[n];
		for (int i = 0; i < n; i++) {
			a[i] = sc.nextInt();
		}

		int count = 0;
		for (int i = 1; i < n; i++) {
			for (int j = 0; j < i; j++) {
				if (a[j] > a[i]) {
					count++;
				}
			}
		}
		System.out.println(count);
	}
}

猜你喜欢

转载自blog.csdn.net/Awt_FuDongLai/article/details/107951024