题目:数组
已知一个二维数组,从左到右递增,从上到下递增,以下code
[ [2,4,6,8,10], [3,5,7,9,11], [4,6,8,10,12], [5,7,9,11,13] ]
查找元素x是否在二维数组中get
思路:
从左向右递增,从上到下递增,那么能够认为是从右到左递减,从上到下递增,因此二维数组中的元素大于同一行中左边的元素,小于同一列中的下面元素,假设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 }