题目描述
牛牛和妞妞在一天晚上决定一起去看一场情人节演唱会,可是由于这场演唱会实在太出名了,有很多情侣都来观看,牛牛和妞妞不小心被人流冲散了!
维持秩序的人决定,让大家排成一列,相邻两个进去的人(2k-1和2k,k为正整数)坐在相邻座位。但是现在的队伍乱糟糟的,有很多情侣都不在相邻位置。维持秩序的人同意让情侣们跟相邻的人交换位置,直到所有情侣都在2k-1和2k位置上为止。
但是维持秩序的人很没有耐心,所以需要最少的交换次数,你能帮情侣们算出这个次数吗?
输入描述
第一行一个整数n,表示一共有n对情侣,编号从1到n。同一对情侣编号相同。1<=n<=100
第二行2n个整数,ai表示编号为ai的情侣在第i个位置。1<=ai<=n
输出描述:
一个整数,代表最少交换次数。
示例1
输入
3
3 3 2 2 1 1
输出
0
示例2
输入
4
1 2 3 4 1 2 3 4
输出
6
参考解法:
import java.util.ArrayList;
import java.util.Scanner;
//参考大佬 @EnvyEvil 的思路(python),用Java实现
//以数组第一个元素ai[0]为基准,保存其值为first_item
//在ai中找到第二个与first_item相等的数,记录其坐标为 second_item_index
//在数组中删除这两个相等的元素
//因为每次都会删除首部元素,删除之后迭代前的第二个元素就会成为首个元素
//而且每次都以第一个元素ai[0]为基准,故 second_item_index 就是两个相同元素的距离
//结果为 res 累加上 second_item_index
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList a = new ArrayList(n);
for (int i = 0; i < n*2; i++) {
a.add(sc.nextInt());
}
int count=0;
for (int i = 1; i < a.size();i++) {
// System.out.println(a.get(i));
if(a.get(i)==a.get(0)) {
count+=i-1;
a.remove(i);
a.remove(0);
i=0;
}
}
System.out.println(count);
}
}