博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Search a 2D Matrix & II
阅读量:5294 次
发布时间:2019-06-14

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

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.

For example,

Consider the following matrix:

[  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]

Given target = 3, return true.

 

  • 在数组中,查找是否存在target这个数
bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {    int i = 0;    for(; i < matrixRowSize; i++)     {        if(matrix[i][matrixColSize - 1] >= target)            break;    }    if(i == matrixRowSize)        return 0;    for(int j = 0; j < matrixColSize; j++)    {        if(matrix[i][j] == target)            return 1;    }    return 0;}
  • 先查找每行最后一个值,对比target;得到哪行后对比该行

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 in ascending from left to right.
  • Integers in each column are sorted in ascending from top to bottom.

For example,

Consider the following 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]]

Given target = 5, return true.

Given target = 20, return false.

 

bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {    int i = 0, j = matrixColSize - 1;    while(i < matrixRowSize && j >= 0)    {        if(matrix[i][j] == target)            return 1;        else if(matrix[i][j] > target)            --j;        else            ++i;    }    return 0;}
  • i代表行,j代表列,选择第一行,最后一列,如果该值大于target则减少一列;否则增加一行,时间为O(m + n)
    • 从左下或右上开始比较
  • 可以每一行都用二分法查找,或者每一列进行二分查找,时间为m*lg(n),或者n*lg(m)但是当m,n变大是会大于上面的方法

转载于:https://www.cnblogs.com/dylqt/p/4979746.html

你可能感兴趣的文章
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
T-SQL触发器,限制一次只能删除一条数据
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>