LeetCode in Python 74/240. Search a 2D Matrix I/II (搜索二维矩阵I/II)

news2025/2/23 16:24:12

搜索二维矩阵I其实可以转换为搜索一维数组,原因在于,只要先确定搜索的整数应该在哪一行,即可对该行进行二分查找。

搜索二维矩阵II中矩阵元素排列方式与I不同,但思想大致相同。

目录

LeetCode in Python 74.

LeetCode in Python 240. 

LeetCode in Python 74.

示例:

图1 搜索二维矩阵输入输出示例

代码:

class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        
        def binaSearch(i, j, target):
            l, r = 0, j
            while l <= r:
                mid = (l + r) // 2
                if target > matrix[i][mid]:
                    l = mid + 1
                elif target < matrix[i][mid]:
                    r = mid - 1
                else:
                    return True
            return False

        for i in range(m):
            if target < matrix[i][n - 1]:
                return binaSearch(i, n - 1, target)
            elif target > matrix[i][n - 1]:
                i += 1
            else:
                return True
        return False

 解释:

1)首先要判断target可能在哪一行,判断标准是将target与矩阵每一行最后一个元素比较,若大于该元素,则表明target在下一行,反之在这一行(按序一行一行比较)。在确定在哪一行之后,利用二分法在该行查找是否有target,有则True,无则False:

        for i in range(m):

                if target < matrix[i][n - 1]:

                        return binaSearch(i, n - 1, target)

               elif target > matrix[i][n - 1]:

                        i += 1

              else:

                       return True

       return False

2)在二分查找中注意,target对比的元素为matrix[i][mid],i代表target可能存在的行,即传过去的参数i。

LeetCode in Python 240. 

示例:

 

图2 搜索矩阵II输入输出示意图 

代码:

class Solution:
    def searchMatrix(self, matrix, target):
        m, n = len(matrix), len(matrix[0])
        r, c = m - 1, 0
        while r >= 0 and c < n:
            if target > matrix[r][c]:
                c += 1
            elif target < matrix[r][c]:
                r -= 1
            else:
                return True
        return False 

解释:

1)先确定列再确定行,即从矩阵左下角元素开始比较,target>该元素则右移,反之上移直到找到target返回True或无target返回False。

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

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

相关文章

Qt | QAbstractButton 抽象类

QAbstractButton 类中的属性 ①、autoExclusive:bool 访问函数:bool autoExclusive() const; void setAutoExclusive(bool); 描述了按钮的自动排他性,若启用了该属性,则属于同一父部件的可选中按钮的行为, 就好像是在同一排他性组中的按钮一样。除了单选按钮,默认为关…

如何进行域名解析?如何清理DNS缓存?(附源码)

目录 1、什么是域名&#xff1f; 2、为什么使用域名&#xff1f; 3、域名解析的完整流程 4、调用gethostbyname系统接口将域名解析成IP地址 5、为什么需要清理系统DNS缓存&#xff1f; 6、使用cmd命令清理DNS缓存 7、通过代码去清除系统DNS缓存 C软件异常排查从入门到精…

数据结构---线性表(顺序表)附代码

目录&#xff1a; 数据结构相关概念 1、什么是数据结构&#xff1f; 2、为什么需要数据结构&#xff1f; 顺序表 1、顺序表的概念及结构 1.1 线性表 1.2 顺序表 2、顺序表分类 3、动态顺序表的实现 什么是数据结构&#xff1f;&#xff1f; 数据结构是由 “数据”和 …

Redis高级篇详细讲解

0.今日菜单 Redis持久化【理解】 Redis主从 Redis哨兵 Redis分片集群【运维】 单点Redis的问题 数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 并发能力问题&#xff1a;单节点Redis并发能力虽然不错&#xff0c;但也无法满足如618这样的高…

用不了ChatGPT?快试试免费又强大的Anthropic Claude

一、Claude 简介 Anthropic 官方&#xff1a; https://www.anthropic.com/product Claude 是最近新开放的一款 AI 聊天机器人&#xff0c;是世界上最大的语言模型之一&#xff0c;比之前的一些模型如 GPT-3 要强大得多&#xff0c;因此 Claude 被认为是 ChatGPT 最有力的竞争…

C语言:一维数组、二维数组、字符数组介绍

数组 介绍一维数组定义应用方法初始化 举例示例结果 二维数组定义应用方法初始化 举例示例结果 字符数组定义应用方法初始化 举例示例结果分析 介绍 在C语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的数据。数组可以是多维的&#xff0c;最…

助力企业挖掘市场商机,赛盈分销与UseePay联合举办家居用品DTC品牌出海峰会!

随着中国经济的井喷式发展以及政策的扶持与完善下&#xff0c;中国家居品牌在全球市场上的实力不断被夯实&#xff0c;国内家居品牌数量不仅激增&#xff0c;商品也更加深远持久影响着海外消费者的生活。 中国家居企业出海之路曾陷入危机当中&#xff0c;而2023年年终的经济复苏…

多行Textview 计算切分后的长度,并回退长度

实现类似的效果&#xff0c;一个多行的 textview&#xff0c; 如果赋值一个超长的字符&#xff0c;尾部长度回退部分&#xff0c;并添加 ... 最后添加一个详情按钮。 如果不超长则不显示详情 效果如图&#xff1a; 获取截断之后的字符长度 fun getLimitedCharacterCount(textV…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

NAT网络地址转换实验(思科)

华为设备参考&#xff1a;NAT网络地址转换实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 NAT&#xff08;Network Address Translation&#xff09;&#xff0c;即网络地址转换技术&#xff0c;是一种在现代计算机网络中广泛应用的技术&#xff0c;主要用于有效管…

2024.4.26——LeetCode 高频题复盘

目录 3. 无重复字符的最长子串206. 反转链表146. LRU 缓存215. 数组中的第K个最大元素25. K 个一组翻转链表15. 三数之和53. 最大子数组和21. 合并两个有序链表1. 两数之和5. 最长回文子串912. 排序数组 3. 无重复字符的最长子串 题目链接 class Solution:def lengthOfLongest…

OV SSL证书申请指南——六步轻松搞定

OV证书的申请流程如下&#xff1a; 一 确定申请渠道 根据自己的品牌偏好&#xff0c;选择一个证书服务商&#xff0c;这里推荐JoySSL,作为国产服务商&#xff0c;除了提供Digicert、Sectigo、Geotrust、Globalsign等国际品牌证书外&#xff0c;还拥有自主品牌OV证书。在JoySSL…

Linux报错处理:‘abrt-cli status’ timed out

最近登录服务器时出现报错&#xff0c;后来查阅资料发现是因为ssh登录时间很久&#xff0c;登录后出现abrt-cli status timed out 的报错。 1.问题分析 abrt-cli是ABRT(Automated Bug Reporting Tool)的命令行接口&#xff0c;用于在Linux系统中处理和报告程序崩溃。 如果abr…

C语言笔试题之重排链表

重排链表 实例要求 1、给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln2、请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …3、不能只是单纯的改变节点内部的值&#xff0c;而是…

Java八种包装类、常量池

文章目录 一、八种基本数据类型及其包装类1.1 类型详解1.2 基本类型与包装类型相互转换——自动装箱拆箱 二、Java常量池三、包装类的常量池技术&#xff08;缓存池&#xff09;3.1 各包装类缓冲池范围3.2 Integer i1new Integer(5) 与 Integer i25 的区别3.3 Integer.valueOf(…

ADOP带您科普什么是单纤双向BiDi光模块?一根光纤,双向通信:单纤双向模块的革命性技术。

单纤双向光模块&#xff08;也称为BiDi光模块&#xff09;是一种使用WDM&#xff08;波分复用&#xff09;双向传输技术的光模块&#xff0c;它在一根光纤上实现了同时进行光通道内的双向传输。相比常规光模块&#xff08;有两个光纤插孔&#xff09;&#xff0c;BiDi光模块只有…

playwright 使用

pip install playwright 是一个命令&#xff0c;用于通过 Python 的包管理工具 pip 安装 Playwright 库。Playwright 是一个用于端到端网页测试的库&#xff0c;支持多种浏览器&#xff0c;包括 Chromium、Firefox 和 WebKit。 执行 pip install playwright 命令后&#xff0c…

SCSS全局配置 vue项目(二)

目录 1、先要查看node版本 2、安装对应的node-sass、sass-loader版本 2.1根据项目使用的node版本安装对应的node-sass版本 2.2根据node-sass版本选择兼容的sass-loader版本&#xff0c;不然项目无法正常运行 3、在 vue.config.js 中配置&#xff1a; 4、在组件中…

全志ARM-官方库SDK安装和验证

进入界面&#xff0c;输入以下指令 git clone https://github.com/orangepi-xunlong/wiringOP //下载源码 cd wiringOP //进入文件夹 sudo ./build clean //清除编译信息 sudo ./build …

Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

Kubernetes - CentOS7搭建k8s集群高可用&#xff08;kubeadm/二进制包部署方式&#xff09;实测配置验证手册 前言概述&#xff1a; 一、Kubernetes—k8s是什么 Kubernetes 这个名字源于希腊语&#xff0c;意为“舵手“或”飞行员"。 Kubernetes&#xff0c;简称K8s&#…