解法一:直接查找
class Solution { public boolean searchMatrix ( int [ ] [ ] matrix, int target) { for ( int i= 0 ; i< matrix. length; i++ ) { for ( int j= 0 ; j< matrix[ 0 ] . length; j++ ) { if ( matrix[ i] [ j] > target) { break ; } if ( matrix[ i] [ j] == target) { return true ; } } } return false ; }
}
解法二:二分查找
class Solution { public boolean searchMatrix ( int [ ] [ ] matrix, int target) { for ( int [ ] row : matrix) { int index = search ( row, target) ; if ( index >= 0 ) { return true ; } } return false ; } public int search ( int [ ] nums, int target) { int low = 0 , high = nums. length - 1 ; while ( low <= high) { int mid = ( high - low) / 2 + low; int num = nums[ mid] ; if ( num == target) { return mid; } else if ( num > target) { high = mid - 1 ; } else { low = mid + 1 ; } } return - 1 ; }
}
注意:
mid = (high - low) / 2 + low
解法三:(Z 字形查找)从右上角开始查找,若matrix[i][j]>target
,则列减少;若matrix[i][j]<target
,则列增加。
class Solution { public boolean searchMatrix ( int [ ] [ ] matrix, int target) { int i= 0 , j= matrix[ 0 ] . length- 1 ; while ( i< matrix. length && j>= 0 ) { if ( matrix[ i] [ j] == target) { return true ; } if ( matrix[ i] [ j] > target) { j-- ; } else { i++ ; } } return false ; }
}