【剑指OFFER】二维数组中的查找

2019-09-17 10:25:36来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

【剑指OFFER】二维数组中的查找

【题目描述】

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

时间限制:1秒 空间限制:32768K

【AC代码】

一、暴力法  时间复杂度:O(mn)

从首元素array[0][0]开始每行逐列顺序查找。

 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         int row = array.length, column = array[0].length; //Java中A[ ][ ]二维数组的A.length与A[i].length的区别:①A.length求该二维数组的行数;②A[i].length求该二维数组第i行的列数。
 4         for (int i = 0; i < row; i++) {
 5             for (int j = 0; j < column; j++){
 6                 if (array[i][j] == target) return true;
 7             }
 8         }
 9         return false;
10     }
11 }
View Code

二、二分查找法  时间复杂度:mlog(n)

从首行开始每行按列数折半查找。

 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         int row = array.length, column = array[0].length;
 4         for (int i = 0; i < row; i++) {
 5             int left = 0, right = column - 1;
 6             while (left <= right) {
 7                 int mid = (right - left) / 2 + left; //避免当left+right的和过大所导致的数据溢出
 8                 if (array[i][mid] > target) right = mid - 1;
 9                 else if (array[i][mid] < target) left = mid + 1;
10                 else return true;
11             }
12         }
13         return false;
14     }
15 }
View Code

 


原文链接:https://www.cnblogs.com/moongazer/p/11504548.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:oauth2 + jwt 实现用户中心

下一篇:记一次tomcat内存大涨到溢出的经历