剑指offer-1-二维数组的查找

二维数组中的查找

http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

思路

  • 数组指针移动,从0 0出发 (更好的思路是从0,n和n,0出发),根据状态移动
  • 二份查找o(nlogn),因为有内置函数,更快完成本题

踩坑:

对于数组 [[]] array.length=1 array[0]=0,所以二维数组判空条件不仅仅是 array.length<=0
实测没加 array==null也AC,保险起见加上,

代码

二分查找

//二分查找
import java.util.*;
public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array==null || array.length<=0 || array[0].length<=0){
            return false;
        }
        for(int i=0;i<array.length;i++){
            if(Arrays.binarySearch(array[i],target)>=0){
                return true;
            }
        }
        return false;
    }
}

指针移动,根据状态移动

//从 0 0 出发 数组指针移动
public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length<=0||array[0].length<=0){
            return false;
        }
        int p=0,q=0;// p行q列
        while(p<array.length && q<array.length){
            if(array[p][q]<target){ //状态 1
                //如果q+1大于tartget
                if(q==array[0].length-1 || array[p][q+1]>target){
                    p++;
                }else{
                    q++;
                }
            }else if(array[p][q]>target){ //状态 2
                if(q==0){
                    p++;
                }else{
                    q--;
                }
            }else{//状态 3
                return true;
            }
        }
        return false;
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务