博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20180315 代码错题(5)
阅读量:5221 次
发布时间:2019-06-14

本文共 805 字,大约阅读时间需要 2 分钟。

给定一个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

 

转载于:https://www.cnblogs.com/kxzh/p/8576092.html

你可能感兴趣的文章
评价意见整合
查看>>
MySQL表的四种分区类型
查看>>
C++变量的“总分性”(Mereology)
查看>>
应用软件学习心得之mapgis功能学习
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
Python学习(一)
查看>>
关于Matchvs一些使用心得与建议
查看>>
Gson获取json串中的key-value
查看>>
创建spring boot项目
查看>>
Behave + Selenium(Python) 四
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
有序链表的归并 分类: 链表 2015-06-...
查看>>
A Plug for UNIX 分类: POJ ...
查看>>
寒假作业01
查看>>
Linux常用命令
查看>>
正确适配苹果ATS审核要求的姿势
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
例1-1
查看>>