1. 程式人生 > >演算法-遞增二維陣列的查詢

演算法-遞增二維陣列的查詢

題目:

已知一個二維陣列,從左到右遞增,從上到下遞增,如下

[
[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
}