一个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; } }