zoukankan      html  css  js  c++  java
  • 【leetcode】1337. The K Weakest Rows in a Matrix

    题目如下:

    Given a m * n matrix mat of ones (representing soldiers) and zeros (representing civilians), return the indexes of the k weakest rows in the matrix ordered from the weakest to the strongest.

    A row i is weaker than row j, if the number of soldiers in row i is less than the number of soldiers in row j, or they have the same number of soldiers but i is less than j. Soldiers are always stand in the frontier of a row, that is, always ones may appear first and then zeros.

    Example 1:

    Input: mat = 
    [[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]], 
    k = 3
    Output: [2,0,3]
    Explanation: 
    The number of soldiers for each row is: 
    row 0 -> 2 
    row 1 -> 4 
    row 2 -> 1 
    row 3 -> 2 
    row 4 -> 5 
    Rows ordered from the weakest to the strongest are [2,0,3,1,4]
    

    Example 2:

    Input: mat = 
    [[1,0,0,0],
     [1,1,1,1],
     [1,0,0,0],
     [1,0,0,0]], 
    k = 2
    Output: [0,2]
    Explanation: 
    The number of soldiers for each row is: 
    row 0 -> 1 
    row 1 -> 4 
    row 2 -> 1 
    row 3 -> 1 
    Rows ordered from the weakest to the strongest are [0,2,3,1]

    Constraints:

    • m == mat.length
    • n == mat[i].length
    • 2 <= n, m <= 100
    • 1 <= k <= m
    • matrix[i][j] is either 0 or 1.

    解题思路:把每一行的1算出来比较一下就行了。

    代码如下:

    class Solution(object):
        def kWeakestRows(self, mat, k):
            """
            :type mat: List[List[int]]
            :type k: int
            :rtype: List[int]
            """
            val = []
            for i in range(len(mat)):
                count = 0
                for j in range(len(mat[i])):
                    if mat[i][j] == 0:
                        break
                    count += 1 
                val.append((i,count))
            
            def cmpf(i1,i2):
                if i1[1] != i2[1]:
                    return i1[1] - i2[1]
                return i1[0] - i2[0]
            
            val.sort(cmp=cmpf)
            
            res = []
            for i in range(k):
                res.append(val[i][0])
            
            return res
            
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/seyjs/p/12283361.html
Copyright © 2011-2022 走看看