一个m行*n列的矩阵,
每行从左至右递增顺序排列,
每列从上至下递增顺序排列...
设计一个时间复杂度最低的算法,
在矩阵中查找某个值是否存在,如果存在,输出该元素在矩阵中的位置
示例图:
算法分析:
根据此矩阵元素的排列特性可知-》
从矩阵的右上角开始遍历,
取当前遍历到的元素的横坐标为i,纵坐标为j,当前值array[],需要查找的值为target
if array[i][j]=target ->输出i,j
if array[i][j]>target ->则需要往左移一位,即i--
if array[i][j]<target ->则需要往下移一位,即j++
查找退出条件: i<0 || j>=array[0].length
Java代码实现如下:
package algorithm.recursive;
import java.util.HashMap;
import java.util.Map;
public class Recursive {
private int[][]_2DimArray;
private Recursive(int[][]_2DimArray) {
this._2DimArray = _2DimArray;
}
public static void main(String[] args) {
int[][]_2DimArray = {{1,4,9},{3,5,10},{6,7,12}};
for(int i=0;i<_2DimArray.length;i++) {
for(int j=0;j<_2DimArray.length;j++) {
System.out.println("solution C:"+positionFind(_2DimArray,_2DimArray[i][j]));
}
System.out.println();
}
}
public static Map<Integer, Integer>positionFind(int[][]_2DimArray,int target){
Map<Integer, Integer> xyMap = new HashMap<>();
int i=_2DimArray.length-1,j=0;
while(true) {
if (_2DimArray[i][j]==target) {
xyMap.put(i, j);
break;
}else if (_2DimArray[i][j]>target) {
i--;
}else {
j++;
}
if (i<0||j>=_2DimArray.length) {
break;
}
}
return xyMap;
}
}