DS二分查找_搜索二维矩阵(纯二分查找写法)

本题我写了两个方法,一个是log n*logm的时间复杂度,就是本文章
一个m+n时间复杂度,这个比较简单,如果不会二分法可以看这篇文章

Description

使用二分查找法来判断m*n矩阵matrix中是否存在目标值target。

该矩阵有以下特性:

1. 每行中的整数从左到右升序排列;

2. 每行的第一个整数大于前一行的最后一个整数。

Input

第一行输入m和n,分别表示矩阵的行数和列数,接着输入m*n个整数。

接着,输入查找次数t,接着依次输入t个整数target。

Output

对于每次查找,若target存在于矩阵中,则输出true,否则输出false。

共输出t行。

Sample

#0
Input

Copy

3 4
-1 3 5 7
10 11 16 20
23 30 34 60

3
3
13
16
Output

Copy

true
false
true

思路:

1.矩阵长这样:

2.找到在第几行

我们可以先判断在第几行,只用拿我们要查询的num与第一列的值比较,
如:

-1  10  23  0x3f3f3f
tips:找到第一个比num=11大的数,那这个数所在的前一行就是num可能在的行,设置一个无穷大在末尾就是为了如果在最后一行的话,那他也比第1列就是23的值大如果我们的num=55时,所以设置一个无穷大界限,55遇到无穷大,所以就知道他可能在无穷大的上一行了

3.在所在的行里面找,看是否存在这个数

代码块:

1.初始化,且设置一个无穷大方便查找在第几行

这样子可以方便我们查找在第几行

2.查找在第几行:

3.然后在行里面查找是否有这个值:

tips:有人会问我好像没有处理比第一行第一个数都小的数欸,其实那时候left=0,然后在第0行里面搜了一遍肯定没有这个数,所以无论如何matrix[left][l]都不可能==num,而且我也有试验过了

样例测试:

1.不在矩阵里,比矩阵第一个数都小的
2.在矩阵里的数
3.数的范围在矩阵里但是没有这个数
4.比矩阵最大的数都大的数

3 4
-1 3 5 7
10 11 16 20
23 30 34 60
4
-5
false
11
true
13
false
99
false

完整代码:

#include <iostream>
using namespace std;
const int maxn = 1e3 + 10;
int matrix[maxn][maxn];
int main()
{
    int m, n;
    cin >> m >> n;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> matrix[i][j];///初始化矩阵
        }
    }
    matrix[m][0] = 0x3f3f3f;//插入一个无穷大的值在第一列末尾
    int t;
    cin >> t;
    while(t--)
    {
        int num;
        cin >> num;
        ///用二分法查找在第几行
        int left = 0, right = m + 1;
        while (left < right - 1)
        {
            int mid = (left + right) >> 1;
            if (matrix[mid][0] > num)//如果比num大就让right=mid因为
            {                        //此时遇到的比num大的数未必是第一个比num大的
                right = mid;
            }
            else                     //<=num的直接让left=mid
            {
                left = mid;
            }
        }
        ///可以得出大概在left行里
        ///求是否在这一行里
        int l = 0, r = n;
        while (l < r - 1)
        {
            int mid = (l + r) >> 1;
            if (matrix[left][mid] <= num)//这里就是普通二分查找了
            {
                l = mid;
            }
            else
            {
                r = mid;
            }
        }
        if (matrix[left][l] == num)//矩阵里面存在着个数
        {
            cout << "true" << endl;
        }
        else//矩阵里面不存在这个数
        {
            cout << "false" << endl;
        }
    }
}

这个写法是我要做ppt的时候发现好像我之前做的有点没按照要求所以重新做的。有过前台样例和部分后台样例。
原理就是这样的,不知道代码最后会不会有点小瑕疵,这个代码没有提交过有人可以拿去试一下(bushi)

感谢观看,有任何问题或者文章哪里有问题都可以提出来,我会看滴!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一键提取微信聊天记录,生成HTML、Word文档永久保存,还能生成微信年度聊天报告

不知道生活中你有没有遇到过这种情况&#xff0c;聊天记录不完整&#xff0c;有的在手机上&#xff0c;有的在电脑上&#xff0c;搜索起来很烦。那有没有一种办法可以把微信聊天记录统一呢&#xff1f;当然是有的。下面&#xff0c;就让我们一起来看一下怎么操作。 先看效果 操…

卧槽!jmeter 竟然这么牛逼,压测爽歪歪~

# Http请求模拟 1、新建线程组 操作&#xff1a;鼠标右键测试计划 -> 添加 -> Threads(Users) -> 线程组 -> 修改测试计划名称 新建线程组 2、添加取样器HTTP请求 操作&#xff1a;鼠标右键线程组 -> 添加 -> Sampler -> HTTP请求 -> 填写请求参数 添…

飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型

5MW飞轮储能一次调频并网三机九节点系统&#xff0c;虚拟惯性和下垂控制&#xff0c;也可加入虚拟同步机VSG控制&#xff0c;飞轮储能容量可调&#xff0c;系统频率50Hz&#xff0c;离散模型&#xff0c;仿真运行速度快。 飞轮储能变流器采用双PWM环设计&#xff0c;并网电压电…

基于javaweb实现的实践教学基地管理系统

一、系统架构 前端&#xff1a;html | js | css | bootstrap 后端&#xff1a;spring | springmvc | mybatis-plus 环境&#xff1a;jdk1.8 | mysql8 | tomcat | maven 二、代码及数据库 三、功能介绍 01. web-首页1 02. web-首页2 03. web-首页3 04. web-首页4 05. 管…

深入理解 Go 语言 Goroutine 的工作原理

一、设计思路 1、设计描述 启动服务之时先初始化一个 Goroutine Pool 池&#xff0c;这个 Pool 维护了一个类似栈的 LIFO 队列&#xff0c;里面存放负责处理任务的 Worker然后在 client 端提交 task 到 Pool 中之后&#xff0c;在 Pool 内部&#xff0c;接收 task 之后的核心…

【计算机组成体系结构】只读存储器ROM

一、ROM分类 二、计算机中重要的ROM 运行时操作系统在主存中&#xff0c;但是由于RAM断电后数据会丢失&#xff0c;所以操作系统都存储在辅存中&#xff0c;在开机时由CPU读入主存&#xff0c;而BIOS芯片就是用来存储自举装入程序的&#xff0c;它用于开机时引导把操作系统装入…

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

ArrayList与顺序表(带完整实例)

【本节目标】 1. 线性表 2. 顺序表 3. ArrayList的简介 4. ArrayList使用 5. ArrayList的扩容机制 6. 扑克牌 1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表…

输入框内容部分不可修改el-input部分动态内容不可修改完整代码 省市区联动,详细地址中省市区选择后不可更改

<tr><e-td :required"!read" label><span>地区&#xff1a;</span></e-td><td><divclass"table-cell-flex"style"width:450px"v-if"!read && this.data.nationCode 148"><el-f…

【ECharts】从零实现echarts地图完整代码(纯前端,包含地图资源)

最终效果 标题环境搭建 这里忽略创建vue项目的操作过程&#xff0c;请自行搭建 vue2 项目、less 环境 安装下载 echarts 这里我们选择npm下载 npm install echarts安装成功后&#xff0c;在 main.js 中把echarts配置到this上 // 引入 echarts import * as Echarts from ech…

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中&#xff0c;判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

JDK安装测试记录

jdk安装测试记录 1.下载JDK2.安装3.适配环境变量4.测试 1.下载JDK 写这篇主要是记录以后自己安装方便&#xff0c;做个记录 Oracle官网 本地下载 需要注然后才能下载: 2.安装 选择默认或者自定义的路径: 后面JRE也可重新定义到自定义的文件夹&#xff1a; 3.适配环境变量 …

Python接口测试环境搭建过程详解

环境搭建 python 安装&#xff1a;建议使用python3.7 pycharm安装 requests安装 &#xff1a;pip3 install requests requests 基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 usage: >>> import requests >>> r requests.get…

Python爬虫之Cookie 与 Session 的区别

文章目录 一、 含义二、有效时长&#xff1a;三、面试中可能会遇到的问题点四、在反爬技术中的应用关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库&#xff0c;必须有两个东西&#xff0c;一个PHP官方写的扩展&#xff0c;一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库&#xff0c;所以两个都不能少&#xff0c;而且版本必须…

ArcGIS导入excel中的经纬度信息,绘制矢量

1.首先整理坐标信息 2.其次转成2003格式的excel文件 3.导入arcgis&#xff0c;点击右键添加excel数据 4.显示xy数据 5.显示经度和纬度信息 6&#xff1a;点击【地理坐标系】->【World】->【WGS 1984】->【确定】 7.投影带的确定方式&#xff1a; 因为自己一直…

字节跳动面经题

字节跳动面经题 1、了解anchor-free? "Anchor-free"是一个指向一类目标检测方法的术语&#xff0c;与传统的"anchor-based"方法相对应。在传统的目标检测中&#xff0c;通常会使用一系列预定义的锚框&#xff08;anchors&#xff09;作为模型的基础。这些…

verilog基本语法-时序逻辑基础-记忆单元

概述: 组合逻辑虽然可以构造各种功能电路&#xff0c;但是他有一个缺点就是输入改变时&#xff0c;输出会立即发生改变。因此历史信息不能被保存下来。两个能够保存信息的存储单元被设计出来&#xff0c;用于保存历史信息。一个是锁存器&#xff0c;另外一个是触发器。锁存器是…

(基础篇)通过node增删改查连接mysql数据库

一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表 首先说一下准备工作 一、准备工具 1.mysql数据库Navicat可视化工具&#xff08;数据库表单已经建好&#xff09; 我这里用的小皮工具直接开启的本地mysql 2.vscode (不用说基本上都有) 3.node.js …

仿牛客论坛的一些细节改进

私信列表的会话头像链接到个人主页 原来的不足 点击私信列表的会话头像应该要能跳转到该目标对象的个人主页。 原来的代码&#xff1a; <a href"profile.html"><img th:src"${map.target.headerUrl}" class"mr-4 rounded-circle user-he…