首页 > 其他 > 详细

leetcode765

时间:2021-04-20 20:47:19      阅读:18      评论:0      收藏:0      [点我收藏+]

1.记录索引交换

class Solution {
public:
    int minSwapsCouples(vector<int>& row) {
        int len=row.size();
        vector<int> idx(len,-1);
        int ret=0;
        for(int i=0;i<len;++i){
            int tmp=conv(row[i]);
            //cout<<"i:"<<i<<endl;
            if(idx[tmp]!=-1){    
                //cout<<2<<endl;
                int tmp_idx=conv(idx[tmp]);
                if(tmp_idx!=i){
                    //cout<<3<<endl;
                    ++ret;
                    swap(tmp_idx,i,row);
                    idx[row[i]]=i;
                    //for(int i:row)cout<<"row:"<<i<<endl;
                }
            }else{
                //cout<<1<<endl;
                idx[row[i]]=i;
            }
        }
        return ret;
    }
    int conv(int num){
        return num%2==0?num+1:num-1;
    }
    void swap(int a,int b,vector<int>& row){
        row[a]=row[a]^row[b];
        row[b]=row[a]^row[b];
        row[a]=row[a]^row[b];
    }
};

2.计算图中环的个数和成对的边个数。最大值2n,总量为n,每个不用交换的边-1,每个环-1

leetcode765

原文:https://www.cnblogs.com/Babylon/p/14682371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!