您的位置:首页 > Web前端

1. 剑指offer编程——数组

2018-03-28 18:47 148 查看

1. 剑指offer编程——数组

题目

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解答

思想:

遍历整个数组,这是想到的最简单的方法,时间复杂度与空间复杂度都为O(n*n)。


public class Solution {
public boolean Find(int target, int [][] array) {
for(int j=0;j<array[0].length;j++){
for(int i=0;i<array.length;i++){
if(array[i][j]==target){
return true;
}
}
}
return false;
}
}


暴力搜索,遍历全部的元素,效率较差。

其它解法

思想:

利用`while`循环从数组的左下角array[array.length-1][0]或者右上角array[0][array[0].length-1]开始遍历数组。假设从数组的左下角遍历数组进行查找。
1. 当target等于遍历的数组元素时,直接输出true;
2. 当target大于遍历的数组元素时,target肯定在遍历数组元素的右方,列数+1;
3. 当target小于遍历的数组元素时,target肯定在遍历数组元素的上方,行数-1;
该方法的时间复杂度为O(m+n)。


拓展:

行枚举列二分O(nlogm)(列二分行枚举O(mlogn)):如果n,m一个特别大一个特别小选择该方案效率会很高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer 数组
相关文章推荐