前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指offer·每行从左到右,每列从上到下(严格)递增的二维数组中,判断某个数是否存在

剑指offer·每行从左到右,每列从上到下(严格)递增的二维数组中,判断某个数是否存在

作者头像
陈黎栋
发布2020-02-18 14:58:48
8980
发布2020-02-18 14:58:48
举报

每行从左到右,每列从上到下(严格)递增的二维数组中,判断某个数是否存在

算法(利用有序,不断排除一行或一列,缩小范围):

  1. 规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束:
  2. * 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。
  3. * 也就是说如果要查找的数字不在数组的右上角,则每-次都在数组的查找范围中剔除)行或者一列,这样每一步都可以缩小
  4. * 查找的范围,直到找到要查找的数字,或者查找范围为空。

数据样例: int[][] matrix = {

  1. {1, 2, 8, 9},
  2. {2, 4, 9, 12},
  3. {4, 7, 10, 13},
  4. {6, 8, 11, 15}
  5. };

目标数字7

过程:

1、7和右上角的9比较后剔除最右边一列。得到:

  1. {1, 2, 8},
  2. {2, 4, 9},
  3. {4, 7, 10},
  4. {6, 8, 11}

2、7和右上角的8比较后剔除最右边一列。得到:

  1. {1, 2},
  2. {2, 4},
  3. {4, 7},
  4. {6, 8}

3、7和右上角的2比较后剔除最上边一行。得到:

  1. {2, 4},
  2. {4, 7},
  3. {6, 8}

直到右上角的数字等于目标数字7.

时间复杂度: O(n)

算法的注意事项:如果需要输出目标数字存在的个数或所在的位置,且目标数字重复存在时,比如目标数字是4,,找到第一个数字4后,把该数字所在的行和列都剔除,继续查找。

优秀解答:http://blog.csdn.net/derrantcm/article/details/45330789

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每行从左到右,每列从上到下(严格)递增的二维数组中,判断某个数是否存在
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档