Search a 2D Matrix

class Solution {
		public boolean searchMatrix(int[][] matrix, int target) {
			if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) { //corner case 
				return false;
			}
			int m = matrix.length;
			int n = matrix[0].length;
			int left = 0;
			int right = m * n - 1; //initiate left and right
			while (left + 1 < right) {
				int midIdx = left + (right - left) / 2;
				int midElement = matrix[midIdx / n][midIdx % n];//matrix row & col
				if (midElement == target) {
					return true;
				} else if (midElement < target) {
					left = midIdx;
				} else {
					right = midIdx;
				}
			}
			if (matrix[left / n][left % n] == target) {
				return true;
			} else if (matrix[right / n][right % n] == target) {
				return true;
			}
			return false;
		}
}

Time Complexity : O(logmn);
Space Complexity : O(1); 

最后更新于

这有帮助吗?