[路飞]_leetcode-765-情侣牵手

简介: leetcode-765-情侣牵手

网络异常,图片无法展示
|


[题目地址][B站地址]


N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。


人和座位用 02N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)


这些情侣的初始座位  row[i] 是由最初始坐在第 i 个座位上的人决定的。


示例 1:


输入: row = [0, 2, 1, 3]
输出: 1
解释: 我们只需要交换row[1]和row[2]的位置即可。
复制代码


示例 2:


输入: row = [3, 2, 0, 1]
输出: 0
解释: 无需交换座位,所有的情侣都已经可以手牵手了。
复制代码


说明:


  1. len(row) 是偶数且数值在 [4, 60]范围内。
  2. 可以保证row 是序列 0...len(row)-1 的一个全排列。


解题思路


本题中情侣必然坐在 2n2n+1 的座位上。


且如果两人是情侣,则两元素值的差值应该等于 1


所以本题可以循环输入数组,依次判断两个座位上的人是否是情侣关系,如果不是,则固定一人,将对的人换到另一个座位上,同时操作次数 +1


如此,遍历完输入数组,记录的操作次数就是本题要返回的最少交换座位的次数。


代码实现


var minSwapsCouples = function(row) {
  // 初始化操作次数为 0
  let res = 0;
  // 遍历输入数组
  for(let i = 0;i<row.length;i+=2){
    // 如果当前一组座位上的两人不是情侣
    if(Math.abs(row[i]-row[i+1])!==1||(row[i]>>1!==row[i+1]>>1)){
      // 固定一个座位的人,将另一个座位上的人换成对的人,并记录操作次数
      targetVal = row[i]+1;
      if(row[i]%2) targetVal = row[i]-1;
      row[row.indexOf(targetVal)] = row[i+1]
      row[i+1] = targetVal
      res++;
    }
  }
  // 返回结果
  return res;
};
复制代码


至此我们就完成了 leetcode-765-情侣牵手


如有任何问题或建议,欢迎留言讨论!

相关文章
|
3月前
|
Shell
[SWPUCTF 2021 新生赛]gift_pwn-入土为安的第十五天
[SWPUCTF 2021 新生赛]gift_pwn-入土为安的第十五天
106 0
|
C++
【PAT甲级 - C++题解】1061 Dating
【PAT甲级 - C++题解】1061 Dating
70 0
绿纹龙的森林游记——UPC
题目描述 暑假来了,绿纹龙很高兴。于是飘飘乎就来到了森林一日游。 可是他却看到了很不和谐的一幕,一群猎人在森林里围捕小动物。 森林可以看做是一个10*10的方格,如下图所示,1表示猎人,0表示小动物。
118 0
绿纹龙的森林游记——UPC
|
存储 测试技术
|
人工智能 安全
UPC-2021个人训练赛第20场-部分题解
RGB Triplets 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 Select Half 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 心灵的抚慰 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示
168 0
|
测试技术
HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
120 0
彩铅练习,路飞
海贼王是我特别喜欢的一部动漫。 这一张路飞画的实在是不怎么像,练习中。 image.png
841 0
生日快乐~
2005年,超女效应席卷全国。 所以我幻想要是可以当明星多好 那么多人喜欢你 那么多人关注你 当然我的这种想法就像一个宝贝一样,装在心里没有让任何人知道。 因为身边有太多人也有这种想法,但是因为说了出来而被大家嘲笑,讽刺。
928 0