剑指Offer——面试题3:二维数组中的查找(Java)

来源:互联网 发布:windows 组播协议 编辑:程序博客网 时间:2024/06/15 00:35

分析:这个题目比较简单,容易的想到的方法是逐行用二分查找。但仔细一想能发现,这样做会有很多重复比较的数据,因此算法可以优化。具体优化解析见书本P38

常规方法:

public boolean isElement(int[][] arr, int data) {        int low = 0, high = 0 , mid = 0;        for(int i=0; i<arr.length; i++ ){            low = 0;            high = arr[i].length - 1;            while(low <= high) {                mid = low + (high - low) / 2;                if(arr[i][mid] == data) {                    return true;                } else if(arr[i][mid] > data) {                    high = mid - 1;                } else {                    low =mid + 1;                }            }        }        return false;    }

优化方法:

public boolean isElement(int[][] arr, int data) {        int i = 0 , j = arr[0].length -1;        while (i<=arr.length-1 && j>=0) {            while (j >= 0 && arr[i][j] > data) j--;            if (j < 0) return false;            while (i <= arr.length - 1 && arr[i][j] < data) i++;            if (i > arr.length - 1) return false;            if (arr[i][j] == data) return true;        }        return false ;    }
阅读全文
0 0
原创粉丝点击