題目:
n 對情侶坐在連續排列的 2n 個座位上,想要牽到對方的手。 計算最少交換座位的次數,以便每對情侶可以並肩坐在一起。 一次交換可選擇任意兩人,讓他們站起來交換座位。
人和座位用 0 到 2n-1 的整數表示,情侶們按順序編號,第一對是 (0, 1),第二對是 (2, 3),以此類推,最後一對是 (2n-2, 2n-1)。
這些情侶的初始座位 row[i] 是由最初始坐在第 i 個座位上的人決定的。
思路:
貪心異或:因為情侶編號只差1,所以除最低位外,其他位都一樣。故可利用與1的異或運算來實現判別。
0^0=0, 0^1=1,與1異或,除最低位外,其餘位皆保持不變;
10=1,11=0,與1異或,最低位變號。
解答:
class
solution
:def
minswapscouples
(self, row: list[
int])-
>
int:
res =
0for i in
range(0
,len
(row),2
):x = row[i]^1
if x == row[i+1]
:continue
res +=
1for j in
range
(i+2
,len
(row)):
if row[j]
== x:
row[i+1]
,row[j]
= row[j]
,row[i+1]
break
return res
每日一題 765 情侶牽手
貪心解決 找到情侶交換位置即可 總體思路大致為 找到每個偶數字置 如果這個位置的數為偶數 那麼他要找的就是比他大1的數 如果這個數的位置在i 1 說明情侶已經坐到了一起 沒坐到一起的話就將i 1處的數與之交換位置 如果這個位置的數為奇數 那麼他要找的就是比他小1的數 如果這個數的位置在i 1 說明情...
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...