Re: [閒聊] 每日LeetCode

作者: GTR12534 (カラス)   2023-09-19 00:27:57
如果用 Python 來寫的話,其實可以運用語言特性來進一步減少要做的事情。
由於 Python 的排序是 stable 的,亦即相同的元素會保有原有的順序;
而如果我們直接對陣列做排序,因為 Python 中陣列的比較是 element-wise 的,
所以如果:
1. 陣列 i 比陣列 j 的士兵還多
-> 陣列 i 的 0 會比陣列 j 早出現
-> 對 Python 的 list 排序來說,陣列 i < 陣列 j
-> 剛好是題目要的
2. 陣列 i 與陣列 j 的士兵一樣多
-> Stable
-> i 跟 j 的順序會保持原樣
-> 也符合題目要求
因此,可以直接對陣列做排序。
Code:
class Solution:
def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
result = [(idx, soldiers) for idx, soldiers in enumerate(mat)]
result.sort(key=lambda x: x[1])
return [i for i, v in result[:k]]
而且還可以塞成一行 XD
Code:
class Solution:
def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
return [i for i, v in sorted([(idx, soldiers) for idx, soldiers in
enumerate(mat)], key=lambda x: x[1])[:k]]
最後的 [:k] 要放裡面或外面都可以,但放裡面應該比較快一點。
我絕對不會說我是寫錯然後發現還是 AC,於是研究了一下才發文的 (X
※ 引述《Rushia (みけねこ的鼻屎)》之銘言:
: https://leetcode.com/problems/the-k-weakest-rows-in-a-matrix/description
: 1337. The K Weakest Rows in a Matrix
: 給你一個陣列mat[][],mat[i][j] = 0 表示市民,1 表示士兵,給予一個數字 k
: ,如果一個列的士兵越少這個列的守備越薄弱,如果士兵一樣多比較上面的列更
: 薄弱,求出前 k 個守備薄弱的列。
: 思路:
: 1.用一個 Heap 儲存每一列的士兵數量和列編號,依照題目要求排序。
: 2.從 Heap 取出 k 個元素,把他們的編號返回即可。
: Java Code:
:
作者: NTUEE2CS (EE轉CS)   2023-09-19 00:29:00
py大師
作者: a000000000 (九個零喔)   2023-09-19 00:33:00
自己掰py
作者: sustainer123 (caster)   2023-09-19 00:47:00
大師
作者: Rushia (みけねこ的鼻屎)   2023-09-19 00:56:00
恨py
作者: JerryChungYC (JerryChung)   2023-09-19 00:56:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com