在查找有序二维数组中查找元素

来源:互联网 发布:管家婆软件管理员密码 编辑:程序博客网 时间:2024/05/17 09:19


解题思路:




代码实现:

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}};@Testpublic void elementExist(){Assert.assertEquals(true, SortedMatrixElementFinder.find(6, matrix));}@Testpublic void elementNotExist(){Assert.assertEquals(false, SortedMatrixElementFinder.find(3, matrix));}}

代码已通过测试,欢迎大家就代码的任何问题提出建议,共同进步~~


注:题目来源于<<剑指offer>>


原创粉丝点击