【二分查找】【z型搜索】LeetCode240:搜索二维矩阵

LeetCoe240搜索矩阵

作者推荐

【贪心算法】【中位贪心】.执行操作使频率分数最大

本文涉及的基础知识点

二分查找算法合集

题目

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例 1:

在这里插入图片描述

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2:
在这里插入图片描述
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
参数范围:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matrix[i][j] <= 109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
-109 <= target <= 109

二分查找

按行或列二分查找。时间复杂度:O(mlogn)。

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for (const auto& v : matrix){auto it = std::equal_range(v.begin(), v.end(),target);if (it.second > it.first){return true;}}return false;}
};

测试用例

template<class T>
void Assert(const T& t1, const T& t2)
{assert(t1 == t2);
}template<class T>
void Assert(const vector<T>& v1, const vector<T>& v2)
{if (v1.size() != v2.size()){assert(false);return;}for (int i = 0; i < v1.size(); i++){Assert(v1[i], v2[i]);}
}int main()
{vector<vector<int>> matrix;int target;{Solution slu;matrix = { {1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30} };target = 5;auto res = slu.searchMatrix(matrix, target);Assert(true, res);}{Solution slu;matrix = { {1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30} };target = 20;auto res = slu.searchMatrix(matrix, target);Assert(false, res);}//CConsole::Out(res);
}

Z字形查找

时间复杂度:O(n+m)。
令r=0,c=m_c-1。比较mat[r][c]和目标数。
大于目标数 删除此列c–
小于目标数 删除此行r++
等于目标数 找到,返回true。
退出循环条件:行数[r,m_c)为0或列数(-1,r]为0。退出时,说明没找到。

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {m_r = matrix.size();m_c = matrix.front().size();for (int r = 0, c = m_c - 1; (r < m_r) && (c >= 0);){const int iCmp = matrix[r][c] - target;if (0 == iCmp ){return true;}else if (iCmp > 0){c--;}else{r++;}}return false;}int m_r, m_c;
};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

OpenAI 偷偷在训练 GPT-4.5!?

最近看到有人已经套路出 ChatGPT 当前的版本&#xff0c;回答居然是 gpt-4.5-turbo&#xff1a; 实际试验下&#xff0c;用 starflow.tech&#xff0c;切换到小星 4 全能版&#xff08;同等官网最新 GPT-4&#xff09;&#xff0c;复制下面这段话问它&#xff1a; What is the…

Apache RocketMQ 5.0 腾讯云落地实践

Apache RocketMQ 发展历程回顾 RocketMQ 最早诞生于淘宝的在线电商交易场景&#xff0c;经过了历年双十一大促流量洪峰的打磨&#xff0c;2016年捐献给 Apache 社区&#xff0c;成为 Apache 社区的顶级项目&#xff0c;并在国内外电商&#xff0c;金融&#xff0c;互联网等各行…

java继承

1.为什么需要继承 我们编写了两个类,一个是Puppil类(小学生),一个是Graduate(大学生),问题:两个类的属性和方法有很多是相同的,怎么办&#xff1f; 把共有的属性和方法抽离出来: 父类&#xff1a; package com.hspedu.extends01;//父类,是Pupil和Graduate的父类 public cla…

UE5 C++(六)— 枚举UENUM、结构体USTRUCT和补充属性说明符

文章目录 枚举&#xff08;ENUM&#xff09;第一种方式第二种方式 结构体&#xff08;USTRUCT&#xff09;补充属性说明符&#xff08;ExposeOnSoawn&#xff09;结构体创建数据表格 枚举&#xff08;ENUM&#xff09; 第一种方式 定义枚举 UENUM(BlueprintType) namespace …

2023.12.18Linux部署项目

动态查看最新内容 防火墙不能杀毒&#xff0c;只能限制服务器的哪些端口可以被访问 哪些主机可以访问本服务器 防火墙开启之后默认封闭所有端口&#xff0c;自己再用策略声明把哪些端口放开 ksh jdk&#xff1a;二进制包 MySQL&#xff1a;rpm包 Redis&#xff1a;源码…

RTLS 解决现实场景的25种问题

实时定位系统 (RTLS) 可以改变我们理解周围世界的方式。 想想你有多少次停下来寻找某样东西。您可能正在寻找钥匙、电话、鞋子、零食、背包、办公室中的重要文件、停车场中的车辆&#xff0c;或者可能正在寻找街道标志或地标来引导自己。我们大多数人每天都会希望更好地了解我…

7.1组合及其优化(LC77-M)

算法&#xff1a; 第一次取1 2 3 4 取1时&#xff0c;留下234 取2时&#xff0c;留下34 取3时&#xff0c;留下4 取4时&#xff0c;留下null 接着继续取234中的2&#xff0c;与1组合&#xff0c;得到12 取234中的3&#xff0c;与1组合&#xff0c;得到13 取234中的4&#…

ElasticSearch详细搭建以及常见错误high disk watermark [ES系列] - 第497篇

导读 历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六…

PHP使用symfony/process来实现多进程请求url或执行多个php文件

1、什么是symfony/process&#xff1f; Symfony/Process是Symfony框架中的一个组件&#xff0c;用于处理和管理子进程。它提供了一个简单易用的API&#xff0c;可以执行外部命令&#xff0c;并与子进程进行交互。 Symfony/Process可以执行各种操作系统命令&#xff0c;如运行…

Amazon CodeWhisperer 在 vscode 的应用

文章作者:旧花阴 CodeWhisperer 是一款可以帮助程序员更快、更安全地编写代码的工具&#xff0c;可以在他们的开发环境中实时提供代码建议和推荐。亚马逊云科技发布的这款代码生成工具 CodeWhisperer 最大的优势就是对于个人用户免费。以在 vscode 为例&#xff0c;演示安装过程…

百度地图添加坐标点,并返回坐标信息

1、创建地图容器 在mounted中初始化地图、鼠标绘制工具和添加鼠标监听事件 vue data中添加地图和绘制工具对象 2、添加初始化化地图方法 initMap(longitude, latitude) {let that thisthat.map new BMapGL.Map("container");// 创建地图实例if (longitude null ||…