解题思路
贪心解决 找到情侣交换位置即可
总体思路大致为 找到每个偶数位置
如果这个位置的数为偶数 那么他要找的就是比他大1的数 如果这个数的位置在i+1 说明情侣已经坐到了一起
没坐到一起的话就将i+1处的数与之交换位置
如果这个位置的数为奇数 那么他要找的就是比他小1的数 如果这个数的位置在i+1 说明情侣已经坐到了一起
没坐到一起的话就将i+1处的数与之交换位置
需要单独写一个搜索元素下标的函数indexOfNum
代码
class Solution {
public int indexOfNum(int[] row,int n,int goal){
for (int i = n;i<row.length;i++){
if (row[i]==goal){
return i;
}
}
return -1;
}
public int minSwapsCouples(int[] row) {
int ans = 0;
for (int i = 0;i < row.length; i=i+2){
int location = 0;
if (row[i]%2==0) location = indexOfNum(row,i,row[i]+1);//偶数
else location = indexOfNum(row,i,row[i]-1);//奇数
if (location!=i+1){
ans++;
int temp = row[i+1];
row[i+1]=row[location];
row[location]=temp;
}
}
return ans;
}
}