765. 情侣牵手

 

 贪心算法(应该算吧),每次至少复合一对情侣

 1 class Solution {
 2 public:
 3     int minSwapsCouples(vector<int>& row) {
 4         if(row.empty()){return 0;}
 5         int n=row.size();
 6         vector<int> d(n,0);//d[i]表示i旁边坐的谁
 7         for(int i=0;i<n;++i){
 8             if(i&1){//座位奇数,(i-1,i)一个座
 9                 d[row[i]]=row[i-1];//i旁边的人是i-1
10                 d[row[i-1]]=row[i];//i-1旁边的人是i
11             }
12         }
13         int cnt=0;
14         for(int i=0;i+1<n;i+=2){
15             if(d[i]==i+1){
16                 //i号人的旁边正好是i+1,即是一对情侣
17                 continue;
18             }
19             else{
20                 int x=d[i];
21                 int y=d[i+1];
22                 d[i]=i+1,d[x]=y,d[i+1]=i,d[y]=x;
23                 ++cnt;
24             }
25         }
26         return cnt;
27     }
28 };

 

posted @ 2020-02-10 00:58  NeoZy  阅读(216)  评论(0编辑  收藏  举报