Leetcode 765. 情侣牵手 (暂时只想到一个贪心解法)

Leetcode 765. 情侣牵手 (暂时只想到一个贪心解法)_第1张图片

 

用贪心的思想,两个人两个人的看,假设这一组不是情侣,那么我们就尝试交换配对,直到所有都满足要求,然后统计交换的次数,这样得到的就是答案(思考如何证明这个是对的)

 

这里有一些细节

1. 如何快速判断情侣

// 可以证明,对于第i个人,其情侣是i^1, ^表示异或。

 

2. 如果不符合,如果在后面找情侣,这个操作是O(N)的,如何优化到O(1), 答案就是hashmap, 注意hashmap里面的元素也要一起交换。

 

class Solution {
public:
    int minSwapsCouples(vector& row) {
        // 2N个情侣,相当于N个沙发
        // 可以证明,对于第i个人,其情侣是i^1, ^表示异或
        // 贪心预处理的思想,能换就换
        int n = row.size(), res = 0;
        vector hashmap(n);
        for(int i=0;i

 

你可能感兴趣的:(算法)