• 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
  • 相关阅读:
    基于C#+SQL server的校园卡消费信息管理系统
    【python百宝箱】抛开GIL束缚:线程、进程、异步实现高效编程
    OpenCV实现手势音量控制
    Dubbo:DubboAdmin简介及安装
    ElasticSearch安装 &es基本操作& 安装es中文分词& ========= springboot 整合ElasticSearch
    .NET源码解读kestrel服务器及创建HttpContext对象流程
    技术公司职位
    2022年12月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
    java基于springboot+vue网上图书商城 销售+借阅两种模式 nodejs前后端分离
    互联网摸鱼日报(2022-12-02)
  • 原文地址:https://blog.csdn.net/sinat_41679123/article/details/136595255