N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum number of swaps so that every couple is sitting side by side. Aswap consists of choosing any two people, then they stand up and switch seats.
The people and seats are represented by an integer from 0 to
2N-1, the couples are numbered in order, the first couple being(0, 1), the second couple being
(2, 3), and so on with the last couple being(2N-2, 2N-1).
The couples' initial seating is given by row[i] being the value of the person who is initially sitting in the i-th seat.
Example 1:
Input: row = [0, 2, 1, 3] Output: 1 Explanation: We only need to swap the second (row[1]) and third (row[2]) person.
Example 2:
Input: row = [3, 2, 0, 1] Output: 0 Explanation: All couples are already seated side by side.
Note:
len(row)is even and in the range of[4, 60].rowis guaranteed to be a permutation of0...len(row)-1.
class Solution {
public:
int minSwapsCouples(vector<int>& row)
{
int a,sum=0;
for (int i = 0; i < row.size(); i += 2)
{
if (row[i] % 2 == 0)a = row[i] + 1;
else a = row[i] - 1;
for (int j = i + 1; j < row.size(); j++)
{
if (a == row[j]&& j != i + 1)
{
swap(row[i + 1], row[j]);
sum++;
break;
}
}
}
return sum;
}
};
本文探讨了一个有趣的问题:如何通过最少次数的交换使每对情侣都能并肩而坐。该问题适用于算法竞赛及面试场景,提供了具体的实现代码示例。
1885

被折叠的 条评论
为什么被折叠?



