LeetCode 1428. 至少有一个 1 的最左端列(二分查找)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 二分查找
      • 2.2 直接走阶梯

1. 题目

(这是一个交互题)

我们称只包含元素 0 或 1 的矩阵为二进制矩阵。
矩阵中每个单独的行都按非递减顺序排序。

给定一个这样的二进制矩阵,返回至少包含一个 1 的最左端列的索引(从 0 开始)。
如果这样的列不存在,返回 -1。

您不能直接访问该二进制矩阵。
你只可以通过 BinaryMatrix 接口来访问。

  • BinaryMatrix.get(row, col) 返回位于索引 (row, col) (从 0 开始)的元素。
  • BinaryMatrix.dimensions() 返回含有 2 个元素的列表 [rows, cols],表示这是一个 rows * cols的矩阵。

如果提交的答案调用 BinaryMatrix.get 超过 1000 次,则该答案会被判定为错误答案。提交任何试图规避判定机制的答案将会被取消资格。

下列示例中, mat 为给定的二进制矩阵。您不能直接访问该矩阵。

示例 1:
在这里插入图片描述

输入: mat = [[0,0],[1,1]]
输出: 0

示例 2:
在这里插入图片描述

输入: mat = [[0,0],[0,1]]
输出: 1

示例 3:
在这里插入图片描述

输入: mat = [[0,0],[0,0]]
输出: -1

示例 4:
在这里插入图片描述

输入: mat = [[0,0,0,1],[0,0,1,1],[0,1,1,1]]
输出: 1提示:
rows == mat.length
cols == mat[i].length
1 <= rows, cols <= 100
mat[i][j] 只会是 01。
mat[i] 已按非递减顺序排序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/leftmost-column-with-at-least-a-one
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 二分查找

  • 对每一行进行二分查找,查找最左侧的1的位置,O(m log n) 时间复杂度
/*** // This is the BinaryMatrix's API interface.* // You should not implement it, or speculate about its implementation* class BinaryMatrix {*   public:*     int get(int row, int col);*     vector<int> dimensions();* };*/class Solution {
public:int leftMostColumnWithOne(BinaryMatrix &binaryMatrix) {int m, n, i, j, left1col = INT_MAX, l, r, mid, mv;auto dim = binaryMatrix.dimensions();m = dim[0], n = dim[1];for(i = 0; i < m; ++i){l = 0, r = n-1;while(l <= r){mid = l+((r-l)>>1);mv = binaryMatrix.get(i, mid);if(mv==0)l = mid+1;else{if(mid==0 || binaryMatrix.get(i,mid-1)==0){left1col = min(left1col, mid);break;}elser = mid-1;}}if(left1col==0)break;}return left1col==INT_MAX ? -1 : left1col;}
};

12 ms 8.3 MB

2.2 直接走阶梯

  • 在右下角或者右上角,开始出发,遇到0竖向走,遇到1往左走,O(m+n)时间复杂度
/*** // This is the BinaryMatrix's API interface.* // You should not implement it, or speculate about its implementation* class BinaryMatrix {*   public:*     int get(int row, int col);*     vector<int> dimensions();* };*/class Solution {
public:int leftMostColumnWithOne(BinaryMatrix &binaryMatrix) {int m, n, i, j, left1col = INT_MAX, cur;auto dim = binaryMatrix.dimensions();m = dim[0], n = dim[1];i = m-1, j = n-1;//从右下角开始,右上角也行while(i >= 0 && j >= 0){cur = binaryMatrix.get(i,j);if(cur==0)i--;//遇到0往上走else//遇到1{left1col = min(left1col, j);j--;//遇到1往左走}if(left1col==0)break;}return left1col==INT_MAX ? -1 : left1col;}
};

8 ms 8.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 370. 区间加法(差分思想)

文章目录1. 题目2. 解题1. 题目 假设你有一个长度为 n 的数组&#xff0c;初始情况下所有的数字均为 0&#xff0c;你将会被给出 k​​​​​​​ 个更新的操作。 其中&#xff0c;每个操作会被表示为一个三元组&#xff1a;[startIndex, endIndex, inc]&#xff0c;你需要将…

LeetCode 1256. 加密数字(bitset)

文章目录1. 题目2. 解题1. 题目 给你一个非负整数 num &#xff0c;返回它的「加密字符串」。 加密的过程是把一个整数用某个未知函数进行转化&#xff0c;你需要从下表推测出该转化函数&#xff1a; 示例 1&#xff1a; 输入&#xff1a;num 23 输出&#xff1a;"10…

java执行程序默认多线程吗_Java多线程 执行程序(1)

本文由作者收集整理所得&#xff0c;作者不保证内容的正确行&#xff0c;转载请标明出处。作者&#xff1a;关新全Java多线程执行程序(1)1.1Thread类static Thread.currentThread返回当前正在执行的线程对象的引用。join 等待线程终止。yield 暂停当前正在执行的线程对象&#…

LeetCode 531. 孤独像素 I

文章目录1. 题目2. 解题1. 题目 给定一幅黑白像素组成的图像, 计算黑色孤独像素的数量。 图像由一个由‘B’和‘W’组成二维字符数组表示, ‘B’和‘W’分别代表黑色像素和白色像素。 黑色孤独像素指的是在同一行和同一列不存在其他黑色像素的黑色像素。 示例: 输入: [[W,…

LeetCode 533. 孤独像素 II

文章目录1. 题目2. 解题1. 题目 给定一幅由黑色像素和白色像素组成的图像&#xff0c; 与一个正整数N, 找到位于某行 R 和某列 C 中且符合下列规则的黑色像素的数量: 行R 和列C都恰好包括N个黑色像素。列C中所有黑色像素所在的行必须和行R完全相同。 图像由一个由‘B’和‘W…

Windows 8桌面的尴尬

刚出炉的Windows8可谓荣宠极致&#xff0c;此时却被指出存在问题&#xff0c;面临失宠的尴尬。到底是什么问题呢&#xff1f; Windows 8中新的用户界面&#xff0c;已被完全证明是两级分化日益严重。  混合操作系统是一个新的GUI概念&#xff0c;友好地触摸界面接口&#xff…

LeetCode 1101. 彼此熟识的最早时间(排序+并查集)

文章目录1. 题目2. 解题1. 题目 在一个社交圈子当中&#xff0c;有 N 个人。每个人都有一个从 0 到 N-1 唯一的 id 编号。 我们有一份日志列表 logs&#xff0c;其中每条记录都包含一个非负整数的时间戳&#xff0c;以及分属两个人的不同 id&#xff0c;logs[i] [timestamp,…

【转载】世界各地对BI的应用状况

欧美企业对商务智能的应用 商务智能活动在美国和欧洲比在世界上任何其他地区都要发达&#xff0c;商务智能已经由“旁门左道”转变为“主门正道”。欧美的企业已经认识到商务智能的重要意义&#xff0c;因而对它寄予很高的期望&#xff0c;希望能够通过商务智能充分利用企业以往…

php gearman 扩展,Ubuntu 12.04 安装 gearman 以及php扩展安装脚本

#!/usr/bash#create by lhb#date 2014-05-07#desc install gearman and php extension for Ubuntu 12.04.4 LTS PHP 5.5apt-get update#安装依赖库apt-get install libboost-all-dev gperf libevent1-dev libcloog-ppl0mkdir -pv /home/lhb/software && cd /home/lhb/s…

LeetCode 379. 电话目录管理系统(哈希set)

文章目录1. 题目2. 解题1. 题目 设计一个电话目录管理系统&#xff0c;让它支持以下功能&#xff1a; get: 分配给用户一个未被使用的电话号码&#xff0c;获取失败请返回 -1check: 检查指定的电话号码是否被使用release: 释放掉一个电话号码&#xff0c;使其能够重新被分配 …

LeetCode 250. 统计同值子树(递归)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;统计该二叉树数值相同的子树个数。 同值子树是指该子树的所有节点都拥有相同的数值。 示例&#xff1a; 输入: root [5,1,5,5,5,null,5]5/ \1 5/ \ \5 5 5 输出: 4来源&#xff1a;力扣&#xff08;LeetC…

php 函数报错,PHP报错函数error_reporting()怎么用?

PHP中&#xff0c;报错函数error_reporting()用于规定应该报告何种PHP错误&#xff0c;语法“error_reporting(level)”&#xff1b;使用该函数可以设置在脚本运行时的错误级别&#xff0c;如果没有设置可选参数level&#xff0c;则仅返回当前的错误报告级别。推荐&#xff1a;…

LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)

文章目录1. 题目2. 解题1. 题目 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。 对于双向循环列表&#xff0c;你可以将左右孩子指针作为双向循环链表的前驱和后继指针&#xff0c;第一个节点的前驱是最后一个节点&#xff0c;最后一个节点的后继是第一个节点。 …

LeetCode 285. 二叉搜索树中的顺序后继(中序遍历)

文章目录1. 题目2. 解题1. 题目 给你一个二叉搜索树和其中的某一个结点&#xff0c;请你找出该结点在树中顺序后继的节点。 结点 p 的后继是值比 p.val 大的结点中键值最小的结点。 示例 1: 输入: root [2,1,3], p 1 输出: 2 解析: 这里 1 的顺序后继是 2。 请注意 p 和…

LeetCode 510. 二叉搜索树中的中序后继 II(查找右子树或者祖父节点)

文章目录1. 题目2. 解题1. 题目 给定一棵二叉搜索树和其中的一个节点 node &#xff0c;找到该节点在树中的中序后继。 如果节点没有中序后继&#xff0c;请返回 null 。 一个结点 node 的中序后继是键值比 node.val大所有的结点中键值最小的那个。 你可以直接访问结点&…

一个关于Remoting的简单例子

前言 今天在整理以前写的一些demo&#xff0c;看到一个关于remoting的例子。好久不用remoting了&#xff0c;果断记录一下。 什么是Remoting 简单回顾下&#xff1a; 1.Remoting是一种远程通信&#xff0c;或者说跨应用程序&#xff08;域&#xff09;通信的技术,在C/S架构的程…

php mqtt qos,Mqtt Qos 深度解读

1.QoS含义 &#xff1a;Quality of Service,服务质量2.作用域发布者的Qos订阅者的Qos3.等级与作用level 0&#xff1a;最多一次的传输level 1&#xff1a;至少一次的传输&#xff0c;(鸡肋)level 2&#xff1a; 只有一次的传输4.交互过程qos0对于qos1而言&#xff0c;对于clien…

LeetCode 1502. 判断能否形成等差数列

文章目录1. 题目2. 解题1. 题目 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 …

matlab2017调用vgg19,VGG19模型训练+读取

VGG-19的介绍和训练这里不做说明,网上资源很多,而且相对比较简单.本博文主要介绍VGG-19模型调用官方已经训练好的模型,进行测试使用.[TOC]VGG-19模型简单介绍VGG模型使用VGG结构模型VGG具体参数模型VGG-19模型文件介绍这里是重难点,VGG-19模型存储的方式有点复杂可以通过作者文…

LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)

文章目录1. 题目2. 解题1. 题目 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat &#xff0c; 请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩…