행렬에서 K개의 가장 약한 행

1713 단어 theabbieleetcodedsa
m x n's(군인을 나타냄) 및 mat's(민간인을 나타냄)의 1 이진 행렬0이 제공됩니다. 군인들은 민간인 앞에 배치됩니다. 즉, 모든 1 는 각 행에 있는 모든 0 의 왼쪽에 나타납니다.

다음 중 하나가 참인 경우 행i이 행j보다 약한 것입니다.
  • 행의 군인 수i가 행의 군인 수j보다 적습니다.
  • 두 행의 병사 수가 같고 i < j 입니다.

  • 가장 약한 행에서 가장 강한 행으로 정렬된 행렬에서 가장 약한 행k의 인덱스를 반환합니다.

    예 1:

    입력: 매트 =
    [[1,1,0,0,0],
    [1,1,1,1,0],
    [1,0,0,0,0],
    [1,1,0,0,0],
    [1,1,1,1,1]],
    케이 = 3
    출력: [2,0,3]
    설명:
    각 행의 군인 수는 다음과 같습니다.
  • 행 0: 2
  • 행 1: 4
  • 행 2: 1
  • 행 3: 2
  • 행 4: 5
    가장 약한 것부터 가장 강한 것으로 정렬된 행은 [2,0,3,1,4]입니다.

  • 예 2:

    입력: 매트 =
    [[1,0,0,0],
    [1,1,1,1],
    [1,0,0,0],
    [1,0,0,0]],
    케이 = 2
    출력: [0,2]
    설명:
    각 행의 군인 수는 다음과 같습니다.
  • 행 0: 1
  • 행 1: 4
  • 행 2: 1
  • 행 3: 1
    가장 약한 것부터 가장 강한 것으로 정렬된 행은 [0,2,3,1]입니다.

  • 제약:
  • m == mat.length
  • n == mat[i].length
  • 2 <= n, m <= 100
  • 1 <= k <= m
  • matrix[i][j]는 0 또는 1입니다.

  • 해결책:

    import bisect
    import heapq
    
    class Solution:
        def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
            mat = [row[::-1] for row in mat]
            heap = []
            for i, row in enumerate(mat):
                strength = -bisect.bisect_left(row, 1)
                heapq.heappush(heap, (strength, i))
            op = []
            for i in range(k):
                op.append(heapq.heappop(heap)[1])
            return op
    

    좋은 웹페이지 즐겨찾기