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 };
进击的小🐴农