【美团外卖测试开发】算法面试题

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

猜你喜欢

转载自blog.csdn.net/wwHRestarting/article/details/79973215