在查找有序二维数组中查找元素
2013-02-26 13:41
134 查看
解题思路:
代码实现:
public class SortedMatrixElementFinder { public static boolean find(int element, int[][] matrix) { SortedMatrix theMatrix = new SortedMatrix(matrix); int topRightElement = theMatrix.getTopRightElement(); while (topRightElement != element) { if (element < topRightElement) theMatrix.excludeThisCol(); else if (element > topRightElement) theMatrix.excludeThisRow(); if (!theMatrix.isLegalIndex()) return false; topRightElement = theMatrix.getTopRightElement(); } return true; } private static class SortedMatrix { private int[][] matrix; private int currentCol; private int currentRow; public int getTopRightElement() { return this.matrix[currentRow][currentCol]; } public void excludeThisRow() { currentRow++; } public boolean isLegalIndex() { return currentCol >= 0 && currentRow >= 0; } public void excludeThisCol() { currentCol--; } public SortedMatrix(int[][] matrix) { if (matrix.length < 1 || matrix[0].length < 1) throw new IllegalArgumentException(); this.matrix = matrix; currentRow = 0; currentCol = matrix[0].length - 1; } } }
测试代码:
import junit.framework.Assert; import org.junit.Test; import algorithm.SortedMatrixElementFinder; public class FindElementInSortedMatrix { private int[][] matrix = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; @Test public void elementExist(){ Assert.assertEquals(true, SortedMatrixElementFinder.find(6, matrix)); } @Test public void elementNotExist(){ Assert.assertEquals(false, SortedMatrixElementFinder.find(3, matrix)); } }
代码已通过测试,欢迎大家就代码的任何问题提出建议,共同进步~~
注:题目来源于<<剑指offer>>
相关文章推荐
- 有序二维数组中查找指定元素
- 有序二维数组查找元素
- 有序二维数组查找元素
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- 3 - 在有序二维数组中查找元素
- 在有序二维数组快速查找元素
- 查找有序二维数组中的元素
- 有序(循环)数组查找元素-二分查找法
- 面试题3:针对部分有序的二维数组的查找
- 查找一个有序数组中的一个元素——二分法
- 二分法查找有序数组中某元素个数
- 剑指offer之有序二维数组查找
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 有序二维数组查找
- 行列均递增的二维数组元素查找
- 经典面试算法题:线性查找有序二维数组
- 有序二维数组的查找
- ] 两个有序非重数组,如果查找数组之间的重复元素 (未完成)
- 有序二维数组中的查找
- 有序矩阵中查找第k小的元素 Kth smallest element in a row-wise and column-wise sorted 2D array