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

xiaoxiao2021-02-28  128

分析:这个题目比较简单,容易的想到的方法是逐行用二分查找。但仔细一想能发现,这样做会有很多重复比较的数据,因此算法可以优化。具体优化解析见书本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 ; }
转载请注明原文地址: https://www.6miu.com/read-36066.html

最新回复(0)