题解 | #数字在升序数组中出现的次数#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
public class Solution {
/**
* 二维数组中的查找
* 要求空间复杂度o(m + n)
* 思路:
* 如果从左上角或者右下角的元素开始遍历 那么它所在的行列其他元素都是比它大或者比它小的不好舍弃
* 所以我们选择从左下角或者右上角开始
* 例如:从左下角开始
* 1. 如果元素大于目标元素,那么所在行都比目标元素大行上移 舍弃一行
* 2. 如果元素小于目标元素,那么所在列都比目标元素小 列右移舍弃一列
* 3. 这样做到了遍历了所有元素
* @param target
* @param array
* @return
*/
public boolean Find(int target, int [][] array) {
// 行
int i = array.length - 1;
// 列 列数 array[0].length
int j = 0;
while (i >= 0 && j < array[0].length){
if(target == array[i][j]) return true;
// 当前元素大于目标元素 舍弃行
else if(target < array[i][j]) i--;
// 当前元素小于目标元素 舍弃列
else if(target > array[i][j]) j++;
}
return false;
}
}