zoukankan      html  css  js  c++  java
  • 20180315 代码错题(5)

    给定一个m行n列的整数矩阵(如图),每行从左到右和每列从上到下都是有序的。判断一个整数k是否在矩阵中出现的最优算法,在最坏情况下的时间复杂度是________。

    O(m*n)
    O(m+n)
    O(log(m*n))
    O(log(m+n))

    答案 B  错选 D
     杨氏矩阵查找算法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    bool stepWise(int mat[][N_MAX], int N, int target,  
                  int &row, int &col) {  
      if (target < mat[0][0] || target > mat[N-1][N-1])
    return false;  
      row = 0;  
      col = N-1;  
      while (row <= N-1 && col >= 0) {  
        if (mat[row][col] < target)  
          row++;  
        else if (mat[row][col] > target)  
          col--;  
        else  
          return true;  
      }  
      return false;  
    }


    首先,按题中要求所得矩阵的左上角和右下角元素分别为整个矩阵的最小值和最大值,这俩个点是矩阵的鞍点。
    下面是最优算法:
    记矩阵的右上角(左下角也可以)元素为a,搜索起点设置为a,要查找的元素为k:
    若a>k,则a所在列的所有元素均大于k,搜索位置左移1位,然后删除该列构成新的矩阵;
    若a<k,则a所在行的所有元素均小于k,搜索位置下移1位,然后删除该行构成新的矩阵;
    若相等,结束查找;
    由新构成的矩阵利用上述方式继续查找(递归调用)。
    本题中,该最优算法的最坏情况也就是说从右上角开始搜索直到左下角结束,每次向左或向下一步,共需要m+n步到达左下角,选B
  • 相关阅读:
    js语法
    页面格式与布局
    css样式标签
    框架
    css样式表选择器
    最大值(东方化改题+老师给的题解)
    数字(东方化改题+老师给的正解)
    测试一下这个编辑器
    请让本题永远沉睡于此(东方化改题+给的标程)
    贪吃的yjj(东方化改题+给的标程)
  • 原文地址:https://www.cnblogs.com/kxzh/p/8576092.html
Copyright © 2011-2022 走看看