每行从左到右,每列从上到下(严格)递增的二维数组中,判断某个数是否存在
算法(利用有序,不断排除一行或一列,缩小范围):
- 规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束:
- * 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。
- * 也就是说如果要查找的数字不在数组的右上角,则每-次都在数组的查找范围中剔除)行或者一列,这样每一步都可以缩小
- * 查找的范围,直到找到要查找的数字,或者查找范围为空。
数据样例: int[][] matrix = {
- {1, 2, 8, 9},
- {2, 4, 9, 12},
- {4, 7, 10, 13},
- {6, 8, 11, 15}
- };
目标数字7
过程:
1、7和右上角的9比较后剔除最右边一列。得到:
- {1, 2, 8},
- {2, 4, 9},
- {4, 7, 10},
- {6, 8, 11}
2、7和右上角的8比较后剔除最右边一列。得到:
- {1, 2},
- {2, 4},
- {4, 7},
- {6, 8}
3、7和右上角的2比较后剔除最上边一行。得到:
- {2, 4},
- {4, 7},
- {6, 8}
直到右上角的数字等于目标数字7.
时间复杂度: O(n)
算法的注意事项:如果需要输出目标数字存在的个数或所在的位置,且目标数字重复存在时,比如目标数字是4,,找到第一个数字4后,把该数字所在的行和列都剔除,继续查找。
优秀解答:http://blog.csdn.net/derrantcm/article/details/45330789