zoukankan      html  css  js  c++  java
  • 算法-递增二维数组的查找

    题目:

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

    [
    [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
    }
  • 相关阅读:
    mysql资料
    MySQL启动与关闭
    poj 2778 DNA Sequence
    poj 1625 Censored!
    zoj 3228 Searching the String
    hdu 4605 Magic Ball Game
    hdu 4610 Cards
    SGU 439 A Secret Book
    NOI2013
    NOI2014
  • 原文地址:https://www.cnblogs.com/fwdqxl/p/9949932.html
Copyright © 2011-2022 走看看