广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何实现搜索二维矩阵功能
  • 507
分享到

C++如何实现搜索二维矩阵功能

2023-06-20 16:06:44 507人浏览 薄情痞子
摘要

本篇内容介绍了“c++如何实现搜索二维矩阵功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成![LeetCode] 74. Search a

本篇内容介绍了“c++如何实现搜索二维矩阵功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

[LeetCode] 74. Search a 2D Matrix 搜索一个二维矩阵

Write an efficient alGorithm that searches for a value in an m x n matrix. This matrix has the following properties:

  • Integers in each row are sorted from left to right.

  • The first integer of each row is greater than the last integer of the previous row.

Example 1:

C++如何实现搜索二维矩阵功能

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true

Example 2:

C++如何实现搜索二维矩阵功能

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false

Constraints:

  • m == matrix.length

  • n == matrix[i].length

  • 1 <= m, n <= 100

  • -104 <= matrix[i][j], target <= 104

这道题要求搜索一个二维矩阵,由于给的矩阵是有序的,所以很自然的想到要用二分查找法,可以在第一列上先用一次二分查找法找到目标值所在的行的位置,然后在该行上再用一次二分查找法来找是否存在目标值。对于第一个二分查找,由于第一列的数中可能没有 target 值,该如何查找呢,如果是查找第一个不小于目标值的数,当 target 在第一列时,会返回 target 所在的行,但若 target 不在的话,有可能会返回下一行,不好统一。所以可以查找第一个大于目标值的数,也就是总结帖中的第三类,这样只要回退一个,就一定是 target 所在的行。但需要注意的一点是,如果返回的是0,就不能回退了,以免越界,记得要判断一下。找到了 target 所在的行数,就可以再次使用二分搜索,此时就是总结帖中的第一类了,查找和 target 值相同的数,也是最简单的一类,分分钟搞定即可,参见代码如下:

解法一:

class Solution {public:    bool searchMatrix(vector<vector<int>>& matrix, int target) {        if (matrix.empty() || matrix[0].empty()) return false;        int left = 0, right = matrix.size();        while (left < right) {            int mid = (left + right) / 2;            if (matrix[mid][0] == target) return true;            if (matrix[mid][0] < target) left = mid + 1;            else right = mid;        }        int tmp = (right > 0) ? (right - 1) : right;        left = 0;        right = matrix[tmp].size();        while (left < right) {            int mid = (left + right) / 2;            if (matrix[tmp][mid] == target) return true;            if (matrix[tmp][mid] < target) left = mid + 1;            else right = mid;        }        return false;    }};

当然这道题也可以使用一次二分查找法,如果我们按S型遍历该二维数组,可以得到一个有序的一维数组,只需要用一次二分查找法,而关键就在于坐标的转换,如何把二维坐标和一维坐标转换是关键点,把一个长度为n的一维数组转化为 m*n 的二维数组 (m*n = n)后,那么原一维数组中下标为i的元素将出现在二维数组中的 [i/n][i%n] 的位置,有了这一点,代码很好写出来了:

解法二:

class Solution {public:    bool searchMatrix(vector<vector<int>>& matrix, int target) {        if (matrix.empty() || matrix[0].empty()) return false;        int m = matrix.size(), n = matrix[0].size();        int left = 0, right = m * n;        while (left < right) {            int mid = (left + right) / 2;            if (matrix[mid / n][mid % n] == target) return true;            if (matrix[mid / n][mid % n] < target) left = mid + 1;            else right = mid;        }        return false;    }};

这道题其实也可以不用二分搜索法,直接使用双指针也是可以的,i指向0,j指向列数,这样第一个被验证的数就是二维数组右上角的数字,假如这个数字等于 target,直接返回 true;若大于 target,说明要减小数字,则列数j自减1;若小于 target,说明要增加数字,行数i自增1。若 while 循环退出了还是没找到 target,直接返回 false 即可,参见代码如下:

解法三:

class Solution {public:    bool searchMatrix(vector<vector<int>>& matrix, int target) {        if (matrix.empty() || matrix[0].empty()) return false;        int i = 0, j = (int)matrix[0].size() - 1;        while (i < matrix.size() && j >= 0) {            if (matrix[i][j] == target) return true;            else if (matrix[i][j] > target) --j;            else ++i;        }           return false;    }};

“C++如何实现搜索二维矩阵功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++如何实现搜索二维矩阵功能

本文链接: https://www.lsjlt.com/news/298278.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++如何实现搜索二维矩阵功能
    本篇内容介绍了“C++如何实现搜索二维矩阵功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成![LeetCode] 74. Search a ...
    99+
    2023-06-20
  • C++实现LeetCode(74.搜索一个二维矩阵)
    [LeetCode] 74. Search a 2D Matrix 搜索一个二维矩阵 Write an efficient algorithm that searches for a...
    99+
    2022-11-12
  • C语言如何实现杨氏矩阵
    本篇内容主要讲解“C语言如何实现杨氏矩阵”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现杨氏矩阵”吧!题目如下:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编...
    99+
    2023-07-05
  • C语言如何实现矩阵连乘
    本篇内容主要讲解“C语言如何实现矩阵连乘”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现矩阵连乘”吧!动态规划法题目描述:给定n个矩阵{A1,A2....An},其中Ai与Ai+1是...
    99+
    2023-06-16
  • C++如何实现验证二叉搜索树
    本文小编为大家详细介绍“C++如何实现验证二叉搜索树”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现验证二叉搜索树”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。验证二叉搜索树Example 1:In...
    99+
    2023-06-19
  • javaweb搜索功能如何实现
    要实现JavaWeb的搜索功能,可以按照以下步骤进行:1. 建立数据库:创建一个适合存储搜索内容的数据库表。例如,可以创建一个包含标...
    99+
    2023-09-21
    javaweb
  • C++如何实现转置矩阵的循环
    这篇文章主要介绍了C++如何实现转置矩阵的循环,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言矩阵的转置主要考查我们对循环的使用,通过简单的循环结构,我们可以很方便的完成矩...
    99+
    2023-06-22
  • C++ OpenCV实现二维码检测功能
    目录前言一、二维码检测二、二维码识别三、二维码绘制四、源码总结前言 本文将使用OpenCV C++ 进行二维码检测。 一、二维码检测 首先我们要先将图像进行预处理,通过灰度、滤波、...
    99+
    2022-11-12
  • C/C++如何实现两矩阵相乘之模拟法
    目录数学中两矩阵怎么相乘C/C++语言实现总结数学中两矩阵怎么相乘 矩阵相乘需要前面矩阵的列数与后面矩阵的行数相同方可相乘。 将前面矩阵的第i行各元素分别与后面矩阵的第j列相应位置元...
    99+
    2023-02-06
    c++两个矩阵相乘 C++矩阵相乘 c++矩阵运算
  • vue如何实现搜索小功能
    这篇文章主要介绍vue如何实现搜索小功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下<!DOCTYPE html><html> <head>&nb...
    99+
    2023-06-21
  • vs中如何实现搜索功能
    在VS中实现搜索功能可以通过以下步骤进行:1. 添加搜索框:在界面中添加一个文本框作为搜索框,供用户输入搜索关键字。2. 添加搜索按...
    99+
    2023-08-23
    vs
  • css如何实现带搜索图标的搜索框功能
    这篇文章给大家分享的是有关css如何实现带搜索图标的搜索框功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言给大家分享一下前端用处很多的带小图标的搜索框的制作方法。效果展示基本思路搜索图像用绝对定位放到搜索框...
    99+
    2023-06-08
  • C++如何实现LeetCode之复原二叉搜索树
    这篇文章给大家分享的是有关C++如何实现LeetCode之复原二叉搜索树的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。[LeetCode] 99. Recover Binary Search Tree 复原二叉搜...
    99+
    2023-06-20
  • jquery如何实现静态搜索功能
    这篇文章主要为大家展示了“jquery如何实现静态搜索功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery如何实现静态搜索功能”这篇文章吧。效果图:代...
    99+
    2022-10-19
  • web用php如何实现搜索功能
    本篇内容介绍了“web用php如何实现搜索功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建搜索表单在网站主页面上添加一个搜索表单,通常...
    99+
    2023-07-05
  • Vue如何实现简单搜索功能
    这篇文章主要讲解了“Vue如何实现简单搜索功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue如何实现简单搜索功能”吧!1、概述在vue项目中,搜索功能是我们经常需要使用的一个场景,最常...
    99+
    2023-07-05
  • Java实现二叉搜索树的插入、删除功能
    二叉树的结构 public class TreeNode { int val; TreeNode left; TreeNode rig...
    99+
    2022-11-12
  • 如何进行Python矩阵转置中的二维数组的实际操作
    本篇文章给大家分享的是有关如何进行Python矩阵转置中的二维数组的实际操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如果你对Python矩阵转置的实际应用操作方案的转置不...
    99+
    2023-06-17
  • Flutter如何实现扫二维码功能
    这篇文章主要为大家展示了“Flutter如何实现扫二维码功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flutter如何实现扫二维码功能”这篇文章吧。具体内容如下首先在pubspec.yam...
    99+
    2023-06-29
  • Ajax如何实现智能提示搜索功能
    这篇文章主要介绍Ajax如何实现智能提示搜索功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、效果图:二、实现过程:  思路: 三、部分代码:html: <div&n...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作