您的位置:首页 > 其它

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

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>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: