有序二维数组中的查找
问题描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
array=
{
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
}
target = 7
输出结果应为true (array包含target)
解题思路:
每次拿右上角的数字和target比较,大于剔除列,小于剔除行。
重复上述步骤,直到查找成功或出界。
如上例,target=7与数组右上角元素array[0][3]=9比较,7小于9,故去除array最后一列。
target=7与余下数组右上角元素array[0][2]=8比较,7小于8,故去除array最后一列
target=7与余下数组右上角元素array[0][1]=2比较,7大于2,故去除array最上一行
target=7与余下数组右上角元素array[1][1]=4比较,7大于4,故去除array最上一行
target=7与余下数组右上角元素array[2][1]=7比较,7等于7,返回true。
实现代码:
public static boolean test (int target, int[][] array) { int i = 0; int j = array[0].length - 1; while (i<array.length && j>=0) { if (target == array[i][j]) return true; else if (target < array[i][j]) j--; else i++; } return false; }
复杂度:
O(M+N),M、N分别为数组的行数与列数。
posted on 2018-07-05 09:22 Deltadeblog 阅读(120) 评论(0) 编辑 收藏 举报