王廷瑋|數位醫療|智慧醫療: 180. Consecutive Numbers WFU

2024年7月11日 星期四

180. Consecutive Numbers

180. Consecutive Numbers


表格: Logs

+-------------+---------+ 
| 欄位名稱 | 類型 | 
+-------------+---------+ 
| id | int | 
| num | varchar |
 +-------------+---------+ 
在 SQL 中,id 是這個表格的主鍵。 id 是自動遞增的欄位。

找到所有連續出現至少三次的數字。

以任何順序返回結果表。

結果格式如下例所示。

範例 :

輸入: Logs 表格: 
+----+-----+
 | id | num | 
+----+-----+ 
| 1 | 1 | 
| 2 | 1 |
| 3 | 1 | 
| 4 | 2 | 
| 5 | 1 | 
| 6 | 2 | 
| 7 | 2 | 
+----+-----+

輸出: 
+-----------------+
| ConsecutiveNums | 
+-----------------+ 
| 1 | 
+-----------------+

解釋: 1 是唯一一個連續出現至少三次的數字。


MySQL


SELECT DISTINCT l1.num AS ConsecutiveNums
FROM Logs l1
JOIN Logs l2 ON l1.id = l2.id - 1
JOIN Logs l3 ON l2.id = l3.id - 1
WHERE l1.num = l2.num AND l2.num = l3.num;

1385ms


Pandas


import pandas as pd

def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:

logs.sort_values(['id'], inplace = True)

logs = logs[(logs.num == logs.num.shift(1)) &
(logs.num == logs.num.shift(2)) &
(logs.id == logs.id.shift(1)+1) &
(logs.id == logs.id.shift(2)+2)
].drop_duplicates('num')
return logs.iloc[:,[1]].rename(columns = {'num':'ConsecutiveNums'})

66.04MB, 539ms


PostgreSQL


-- Write your PostgreSQL query statement below
SELECT DISTINCT l1.num AS ConsecutiveNums
FROM
Logs l1
JOIN Logs l2 ON l1.id + 1 = l2.id
JOIN Logs l3 ON l2.id + 1 = l3.id
WHERE
l1.num = l2.num
AND l2.num = l3.num;

0.00MB, 286ms