題目:數組
已知一個二維數組,從左到右遞增,從上到下遞增,以下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 }