题目描述

image.png

解题思路

二分查找

image.png

代码

  1. public boolean searchMatrix(int[][] matrix, int target) {
  2. int m = matrix.length;
  3. //判断是否为空数组
  4. if(m==0) return false;
  5. int n = matrix[0].length;
  6. int idx,idxElement;
  7. int left=0,right=m*n-1;
  8. //注意这里要写的是<=
  9. while(left<=right){
  10. //计算中间值
  11. idx = (left+right)/2;
  12. //在原数组中对应的位置
  13. idxElement=matrix[idx/n][idx%n];
  14. //二分查找
  15. if(idxElement==target){
  16. return true;
  17. }else if(idxElement<target){
  18. left=idx+1;
  19. }else{
  20. right=idx-1;
  21. }
  22. }
  23. return false;
  24. }

复杂度分析

  • 时间复杂度 : 由于是标准的二分查找,时间复杂度为O(\log(m n))。
  • 空间复杂度 : O(1)。