码迷,mamicode.com
首页 > 编程语言 > 详细

算法-递增二维数组的查找

时间:2018-11-13 02:49:48      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:遍历   算法   search   方法   ...   二维   从右到左   tar   题目   

题目:

已知一个二维数组,从左到右递增,从上到下递增,如下

[
[2,4,6,8,10],
[3,5,7,9,11],
[4,6,8,10,12],
[5,7,9,11,13]
]

查找元素x是否在二维数组中

思路:
从左向右递增,从上到下递增,那么可以认为是从右到左递减,从上到下递增,所以二维数组中的元素大于同一行中左边的元素,小于同一列中的下面元素,假设x=8.5,x先与右上角的10比较,x小于10则x在10的左边,x再与8比较,x大于8,则x在8的下面,x继续与9比较,小于9,所以x在9的左边,x再与7比较...,一直比较下去,直到遍历了二维数组中的每一行和每一列。这个比较方法每一次比较都可以淘汰掉一行或者一列的数据,时间复杂度为O(N)

实现:

func search(matrix [][]int, target int)bool{
   xl:=len(matrix[0])
   yl:=len(matrix)
   for i:=0;i<yl;i++ {
   for j:=xl-1;j>=0;j-- {
      if matrix[i][j]>target{
           xl--
      }else if matrix[i]<target{
           break
      }else{
      return true
   }
  }
  retuen false
}

算法-递增二维数组的查找

标签:遍历   算法   search   方法   ...   二维   从右到左   tar   题目   

原文地址:https://www.cnblogs.com/fwdqxl/p/9949932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!