• leetcode - 1428. Leftmost Column with at Least a One


    Description

    A row-sorted binary matrix means that all elements are 0 or 1 and each row of the matrix is sorted in non-decreasing order.

    Given a row-sorted binary matrix binaryMatrix, return the index (0-indexed) of the leftmost column with a 1 in it. If such an index does not exist, return -1.

    You can’t access the Binary Matrix directly. You may only access the matrix using a BinaryMatrix interface:

    • BinaryMatrix.get(row, col) returns the element of the matrix at index (row, col) (0-indexed).
    • BinaryMatrix.dimensions() returns the dimensions of the matrix as a list of 2 elements [rows, cols], which means the matrix is rows x cols.

    Submissions making more than 1000 calls to BinaryMatrix.get will be judged Wrong Answer. Also, any solutions that attempt to circumvent the judge will result in disqualification.

    For custom testing purposes, the input will be the entire binary matrix mat. You will not have access to the binary matrix directly.

    Example 1:

    Input: mat = [[0,0],[1,1]]
    Output: 0
    
    • 1
    • 2

    Example 2:

    Input: mat = [[0,0],[0,1]]
    Output: 1
    
    • 1
    • 2

    Example 3:

    Input: mat = [[0,0],[0,0]]
    Output: -1
    
    • 1
    • 2

    Constraints:

    rows == mat.length
    cols == mat[i].length
    1 <= rows, cols <= 100
    mat[i][j] is either 0 or 1.
    mat[i] is sorted in non-decreasing order.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Solution

    Binary Search

    For each row, do a binary search, and update the leftmost column index.

    Time complexity: o ( log ⁡ n ∗ m ) o(\log n * m) o(lognm)
    Space complexity: o ( 1 ) o(1) o(1)

    Linear

    Solved after hints.

    Start from top right, if the current number is 0, go down. Otherwise go left.

    Time complexity: o ( m + n ) o(m+n) o(m+n)
    Space complexity: o ( 1 ) o(1) o(1)

    Code

    Binary Search

    # """
    # This is BinaryMatrix's API interface.
    # You should not implement it, or speculate about its implementation
    # """
    #class BinaryMatrix(object):
    #    def get(self, row: int, col: int) -> int:
    #    def dimensions(self) -> list[]:
    
    class Solution:
        def leftMostColumnWithOne(self, binaryMatrix: 'BinaryMatrix') -> int:
            rows, cols = binaryMatrix.dimensions()
            def find_index(row: int) -> int:
                left, right = 0, cols - 1
                while left < right:
                    mid = (left + right) >> 1
                    if binaryMatrix.get(row, mid) == 0:
                        left = mid + 1
                    else:
                        right = mid
                return (left + right) >> 1
            res = -1
            for i in range(rows):
                col_index = find_index(i)
                if binaryMatrix.get(i, col_index) == 1:
                    res = min(res, col_index) if res != -1 else col_index
            return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    Linear

    # """
    # This is BinaryMatrix's API interface.
    # You should not implement it, or speculate about its implementation
    # """
    #class BinaryMatrix(object):
    #    def get(self, row: int, col: int) -> int:
    #    def dimensions(self) -> list[]:
    
    class Solution:
        def leftMostColumnWithOne(self, binaryMatrix: 'BinaryMatrix') -> int:
            rows, cols = binaryMatrix.dimensions()
            cur_row, cur_col = 0, cols - 1
            res = cols
            while cur_row < rows and cur_col >= 0:
                if binaryMatrix.get(cur_row, cur_col) == 1:
                    res = min(res, cur_col)
                    cur_col -= 1
                else:
                    cur_row += 1
            return res if res != cols else -1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    SpringCloud微服务(二)——Eureka服务注册中心
    C++函数在重载时如何判断函数签名(function signature)是否相同
    Websocket学习
    数字孪生技术助力城市轨道交通智慧升级
    【Django | 安全防护】防止XSS跨站脚本攻击
    newstarctf2022week2
    ArcGIS制作某村土地利用现状图
    Avalonia 实现跨平台的视频聊天、屏幕分享(源码,支持Win、银河麒麟、统信UOS)
    几张高度概括电阻、电容、电感与磁珠的思维导图(高清原图)
    【软件分析课程11讲-学习笔记】布尔可满足性SAT
  • 原文地址:https://blog.csdn.net/sinat_41679123/article/details/136595255