package com.interview.algorithms.array; /** * Created_By: zouzhile * Date: 11/1/14 * Time: 5:11 PM */ public class C4_72_MatrixBinarySearch { public boolean search(int[][] A, int N) { return search(A, 0, 0, A.length - 1, A[0].length - 1, 6); } public boolean search(int[][] A, int x1, int y1, int x2, int y2, int N) { /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ if(x1 > x2 || y1 > y2) return false; int centerX = (x1 + x2) / 2; int centerY = (y1 + y2) / 2; int center = A[centerX][centerY]; if(N == center) return true; else if(N < center) return search(A, centerX + 1, y1, x2, centerY, N) || search(A, x1, centerY+1, centerX, y2, N) || search(A, x1, y1, centerX, centerY, N); else return search(A, centerX + 1, y1, x2, centerY, N) || search(A, x1, centerY+1, centerX, y2, N) || search(A, centerX+1, centerY + 1, x2, y2, N); } public boolean searchOptimized(int[][] A, int N) { int row = 0, col = A[0].length - 1; int val; while(row < A.length && col >=0) { val = A[row][col]; if(val == N) return true; else if(N < val) col --; else row ++; } return false; } public static void main(String[] args) { int[][] array = {{1,2,3,4}, {2,3,4,5},{3,4,5,6},{4,5,6,7}}; C4_72_MatrixBinarySearch searcher = new C4_72_MatrixBinarySearch(); System.out.println(searcher.search(array, 6)); System.out.println(searcher.searchOptimized(array, 9)); } }