【leetcode】765. 情侣牵手

#define min(a,b) ((a)<(b))?(a):(b)

bool isLovers(int i, int j){
    if (abs(i - j) == 1){
        int minVal = min(i, j);
        if (minVal % 2 == 0){
            return true;
        }
    }
    return false;
}
int minSwapsCouples(int* row, int rowSize){
    int pst[60], i, cnt = 0;
    int hash[60] = { 0 };
    for (i = 0; i<rowSize; i++){
        pst[row[i]] = i;
    }
    for (i = 0; i<rowSize - 1; i += 2){
        if (hash[row[i]])
            continue;
        if ( isLovers(row[i], row[i+1]) ){
            hash[row[i]] = hash[row[i + 1]] = 1;
            continue;
        }
        else{
            int lovers = (row[i] % 2) ? row[i] - 1 : row[i] + 1;
            int num = (pst[lovers] % 2) ? row[pst[lovers] - 1] : row[pst[lovers] + 1];
            if (isLovers(row[i + 1], num)){
                hash[row[i]] = hash[row[i + 1]] = hash[lovers] = hash[num] = 1;
            }
            else{
                hash[row[i]] = hash[lovers] = 1;
                row[pst[lovers]] = row[i + 1];
                pst[row[i+1]]=pst[lovers];
            }
        }
        cnt++;

    }
    return cnt;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14425312.html