在一个二维数组中(每个一维数组的长度相同),且数据每一行从左到右递增,从上到下递增。请编写一个函数,输入一个二维数组和一个整数,判断数组中是否有此整数。
分析:如果从左上角第一个数开始的话,往右和往下数都比它大,假设已给的数比它大的话,它不知道该从哪个方向搜索;若从左下角开始的话,往上搜索是比它小的数,往右搜索是比它大的数,故从这个数开始搜索比较好;右上角和右下角以此类推,故选择左下角和右上角是最好的策略。以右上角为例,代码如下:
public class Solution { public boolean Find(int target, int [][] array) { if(array.length==0 || array[0].length==0) return false; int m = array[0].length-1; int n = 0; int temp = array[n][m]; while(target != temp){ if(m>0 && n<array.length-1){ if(target>temp){ n = n + 1; }else if(target<temp){ m = m - 1; } temp = array[n][m]; }else{ return false; } } return true; } }
原文地址:https://www.weiweiblog.cn/find2array/