zoukankan      html  css  js  c++  java
  • [Swift]LeetCode765. 情侣牵手 | Couples Holding Hands

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10533329.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum number of swaps so that every couple is sitting side by side. A swapconsists of choosing any two people, then they stand up and switch seats.

    The people and seats are represented by an integer from 0 to 2N-1, the couples are numbered in order, the first couple being (0, 1), the second couple being (2, 3), and so on with the last couple being (2N-2, 2N-1).

    The couples' initial seating is given by row[i] being the value of the person who is initially sitting in the i-th seat.

    Example 1:

    Input: row = [0, 2, 1, 3]
    Output: 1
    Explanation: We only need to swap the second (row[1]) and third (row[2]) person. 

    Example 2:

    Input: row = [3, 2, 0, 1]
    Output: 0
    Explanation: All couples are already seated side by side. 

    Note:

    1. len(row) is even and in the range of [4, 60].
    2. row is guaranteed to be a permutation of 0...len(row)-1.

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

    人和座位用 0 到 2N-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 的一个全排列。

    Runtime: 8 ms
    Memory Usage: 19.1 MB
     1 class Solution {
     2     func minSwapsCouples(_ row: [Int]) -> Int {
     3         var row = row
     4         var res:Int = 0
     5         var n:Int = row.count
     6         for i in stride(from:0,to:n,by:2)
     7         {
     8             if row[i + 1] == (row[i] ^ 1)
     9             {
    10                 continue            
    11             }
    12             res += 1
    13             for j in (i + 1)..<n
    14             {
    15                 if row[j] == (row[i] ^ 1)
    16                 {
    17                     row[j] = row[i + 1]
    18                     row[i + 1] = row[i] ^ 1
    19                     break
    20                 }
    21             }
    22         }
    23         return res
    24     }
    25 }

    8ms

     1 class Solution {
     2     func minSwapsCouples(_ row: [Int]) -> Int {
     3         guard row.count > 2 else {
     4             return 0 
     5         }
     6         var row = row 
     7         var numberOfSwaps: Int = 0 
     8         for seat in stride(from:0, to: row.count - 1, by: 2) {
     9             let current = row[seat]
    10             let other = row[seat + 1]
    11             if current == other ^ 1 { continue }
    12             numberOfSwaps += 1 
    13             for j in (seat+2)..<row.count {
    14                 if row[j] == current ^ 1 {
    15                     row.swapAt(j, seat + 1)
    16                 }
    17             }
    18         }
    19         return numberOfSwaps
    20     }
    21 }

    12ms

     1 class Solution {
     2     func minSwapsCouples(_ row: [Int]) -> Int {
     3         var row = row
     4         var res = 0
     5         for i in 0..<row.count {
     6             guard i % 2 == 0 else { continue }
     7             let target = row[i] % 2 == 0 ? row[i] + 1 : row[i] - 1
     8             if row[i + 1] == target { continue }
     9             for j in i+2..<row.count {
    10                 if row[j] == target {
    11                     (row[i+1], row[j]) = (row[j], row[i+1])
    12                     res += 1
    13                 }
    14             }
    15         }
    16         return res
    17     }
    18 }
  • 相关阅读:
    MVC+jQuery开发B/S系统②:表单绑定
    插入排序
    笔记:实例管理
    文件读写冲突的解决办法:ReaderWriterLock
    MVC+jQuery数据绑定①:列表绑定(二)
    MVC+jQuery数据绑定①:列表绑定(三)
    非递归求 T(n) = [T(n1),n,T(n1)] 已知T1=[1]
    笔记:契约总结
    面试题:1~ n1 有n个数,是有序的,找出重复的那个数。
    Thread系列——ThreadPool
  • 原文地址:https://www.cnblogs.com/strengthen/p/10533329.html
Copyright © 2011-2022 走看看