[Week 6-1] 🔥特集講座初日
6872 ワード
第6週火曜日個人学習 アルゴリズムの問題は久しぶりですね~
重複しない要素の
Lucky number:行の最小値、列の最大値.
に近づく
各行の最小値を検索し、最小値を属する列の最大値と比較します.
時間複雑度:O(m*n)=O(n^2)
コード#コード#
より速い方法はありませんか?
しょうげき
とてもPythonらしいコードを見つけました.ファスナーや解包の使い方は頭の中では知っていましたが、問題に応用されるとは思わなかった・・・行の最小値と列の最大値を別々に探して交差を求めるとは思わなかった.忘れずに使ってくださいね.
時間複雑度:O(N)?zipの時間的複雑さはよくわかりません.
Python 3からzipはiteratorオブジェクトとして動作するため,zipの時間的複雑度はO(N)である.Python 2ではzipはlistを返すため,時間的複雑度はO(N*M)である.
[LeetCode 1380. Lucky Numbers in a Matrix]
重複しない要素の
m x n
行列が与えられると、行列に存在するすべてのLucky numberが戻されるLucky number:行の最小値、列の最大値.
に近づく
各行の最小値を検索し、最小値を属する列の最大値と比較します.
時間複雑度:O(m*n)=O(n^2)
コード#コード#
class Solution:
def luckyNumbers (self, matrix: List[List[int]]) -> List[int]:
# lucky number : 자신이 속한 행에서는 최소, 열에서는 최대가 되는 수
M = len(matrix[0])
N = len(matrix)
luckies = []
for row in matrix:
minNum = min(row)
minIdx = row.index(minNum)
col = [matrix[i][minIdx] for i in range(N)]
if max(col) == minNum:
luckies.append(minNum)
return luckies
しょうげき
とてもPythonらしいコードを見つけました.ファスナーや解包の使い方は頭の中では知っていましたが、問題に応用されるとは思わなかった・・・行の最小値と列の最大値を別々に探して交差を求めるとは思わなかった.忘れずに使ってくださいね.
時間複雑度:O(N)?zipの時間的複雑さはよくわかりません.
Python 3からzipはiteratorオブジェクトとして動作するため,zipの時間的複雑度はO(N)である.Python 2ではzipはlistを返すため,時間的複雑度はO(N*M)である.
class Solution:
def luckyNumbers (self, matrix: List[List[int]]) -> List[int]:
# lucky number : 자신이 속한 행에서는 최소, 열에서는 최대가 되는 수
matrix_T = list(zip(*matrix))
rowMin = []
colMax = []
for row in matrix: # 각 행에서의 최소값
rowMin.append(min(row))
for col in matrix_T: # 각 열에서의 최대값
colMax.append(max(col))
return set(rowMin) & set(colMax)
Reference
この問題について([Week 6-1] 🔥特集講座初日), 我々は、より多くの情報をここで見つけました https://velog.io/@zeen263/Week-6-1-특강-1일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol