博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣算法题—074搜索二维矩阵
阅读量:5926 次
发布时间:2019-06-19

本文共 2178 字,大约阅读时间需要 7 分钟。

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

输入:matrix = [  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]target = 3输出: true

示例 2:

输入:matrix = [  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]target = 13输出: false
1 #include "_000库函数.h" 2  3  4 //题目要求使用高效算法,但不知最高效的是哪个 5 //本解法复杂度为m+n 6 class Solution { 7 public: 8     bool searchMatrix(vector
>& matrix, int target) { 9 if (matrix.empty() || matrix[0].empty())return false;10 int m = matrix.size();11 int n = matrix[0].size();12 if (target< matrix[0][0] || target>matrix[m - 1][n - 1])return false;13 for (int i = 0; i < m; ++i)14 if (target >= matrix[i][0] && target <= matrix[i][n - 1]) {15 for (int j = 0; j < n; ++j)16 if (target == matrix[i][j])return true;17 return false;18 }19 return false;20 }21 };22 23 //当然这道题也可以使用一次二分查找法,如果我们按S型遍历该二维数组,24 //可以得到一个有序的一维数组,那么我们只需要用一次二分查找法,25 //而关键就在于坐标的转换,如何把二维坐标和一维坐标转换是关键点,26 //把一个长度为n的一维数组转化为m*n的二维数组(m*n = n)后,27 //那么原一维数组中下标为i的元素将出现在二维数组中的[i / n][i%n]的位置,28 //29 30 // One binary search31 class Solution {32 public:33 bool searchMatrix(vector
> &matrix, int target) {34 if (matrix.empty() || matrix[0].empty()) return false;35 if (target < matrix[0][0] || target > matrix.back().back()) return false;36 int m = matrix.size(), n = matrix[0].size();37 int left = 0, right = m * n - 1;38 while (left <= right) {39 int mid = (left + right) / 2;40 if (matrix[mid / n][mid % n] == target) return true;41 else if (matrix[mid / n][mid % n] < target) left = mid + 1;42 else right = mid - 1;43 }44 return false;45 }46 };47 48 void T074() {49 Solution s;50 vector
>v;51 v = { { 1,3,5,7},{ 10,11,16,20},{ 23,30,34,50} };52 cout << s.searchMatrix(v, 3) << endl;53 cout << s.searchMatrix(v, 13) << endl;54 55 56 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10705619.html

你可能感兴趣的文章
编写一个程序,将一串字符倒序存放后输出。
查看>>
sizeof string
查看>>
C语言解释器的实现--语法解析(五)
查看>>
20165313 《Java程序设计》第七周学习总结
查看>>
Python 学习笔记(三)Function
查看>>
【leetcode】75. Sort Colors
查看>>
简单团队-爬取豆瓣电影TOP250-需求分析
查看>>
控制用户的访问之权限、角色【weber出品必属精品】
查看>>
【算法】LeetCode算法题-Maximum Subarray
查看>>
8-Python3从入门到实战—基础之数据类型(集合-Sets)
查看>>
[python] 解决pip install download速度过慢问题 更换豆瓣源
查看>>
linux 安装apache http server
查看>>
分布式拒绝服务攻击(DDoS)原理及防范
查看>>
jQuery-DOM操作之属性、class
查看>>
OC面向对象—封装
查看>>
.gitignore文件将已经纳入版本管理的文件删除
查看>>
List<>与string[]以及List<>与string
查看>>
神经网络- receptive field
查看>>
SharpDeveloeper开发ASP.NET MVC汗流浃背
查看>>
gridview实现分页
查看>>