剑指 0ffer 二维数组中的查找

快乐的工程师 · · 710 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

算法名称:二维数组中的查找

题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路:

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

例如,我们要在上述的二维数组中查找数字7的步骤如下图所示:


F3708B2CFD9F71157AA94175FAE464DB.jpg

实例代码:

  • Java
class Solution {

 public boolean findNumberIn2DArray(int[][] matrix, int target) {

 if (matrix.length \> 0 && matrix[0].length \> 0) {

 int row = 0;

 int colomn = matrix[0].length - 1;

 while (row \< matrix.length && colomn \>= 0) {

 if (target \< matrix[row][colomn]) {

 colomn--;

 } else if (target \> matrix[row][colomn]) {

 row++;

 } else if (target == matrix[row][colomn]) {

 return true;

 }

 }

 }

 return false;

 }

}
  • Golang版
func findNumberIn2DArray(matrix [][]int, target int) bool {

if len(matrix) > 0 && len(matrix[0]) > 0 {

 row := 0

 colomn := len(matrix[0]) - 1

 for row < len(matrix) && colomn >= 0 {

 if target < matrix[row][colomn] {

 colomn--

 } else if target > matrix[row][colomn] {

 row++

 } else if target == matrix[row][colomn] {

 return true

 }

 }

 }

 return false

}

本题考点:

  • 考察面试者对二维数组的理解及编程能力。二维数组在内存中占据连续的空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:快乐的工程师

查看原文:剑指 0ffer 二维数组中的查找

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

710 次点击  
加入收藏 微博
下一篇:Go
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传