剑指offer_by牛客网

Posted yunyouhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer_by牛客网相关的知识,希望对你有一定的参考价值。

2017/9/6

二维数组中的查找 m*n

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

找是否存在target

我的想法,for循环判断每行首尾,再进行二分

O(m*logn)

技术分享
 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         if (array == null || array.length == 0 || array[0].length == 0) {
 4             return false;
 5         }
 6         int row = array.length;
 7         int col = array[0].length;
 8         for (int i = 0; i < row; i++) {
 9             int start = 0;
10             int end = col - 1;
11             if (array[i][0] <= target && array[i][end] >= target) {
12                while (start + 1 < end) {
13                    int mid = start + (end - start) / 2;
14                     if (array[i][mid] == target) {
15                         return true;
16                     } else if (array[i][mid] > target) {
17                         end = mid;
18                     } else{
19                         start = mid;
20                     }
21                 } 
22                 if (array[i][start] == target) {
23                     return true;
24                 }
25                 if (array[i][end] == target) {
26                     return true;
27                 }
28             }
29             
30         }
31         return false;
32     }
33 }
View Code

 答案:

从左下角(或右上角,进行二分)时间复杂度O(m+n)

技术分享
 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         if (array == null || array.length == 0 || array[0].length == 0) {
 4             return false;
 5         }
 6         int row = array.length;
 7         int col = array[0].length;
 8         int i = 0;
 9         int j = col - 1;
10         while (i < row && j >= 0) {
11             if (array[i][j] == target) {
12                 return true;
13             } else if (array[i][j] > target) {
14                 j--;
15             } else {
16                 i++;
17             }
18         }
19         return false;
20     }
21 }
View Code

 

以上是关于剑指offer_by牛客网的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer(牛客网) 矩形覆盖

剑指Offer(牛客网) 跳台阶

剑指Offer(牛客网) 反转链表

牛客网剑指Offer习题集题解0

剑指Offer(牛客网) 二叉树的镜像

牛客网剑指offer-Java