1、二维数组的查找

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/PZHU_CG_CSDN/article/details/81937882

题目描述:

  在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:既然每一行是有序的,那么就遍历行(key 大于数组第一位小于最后一位,那么说明 key 可能在当前这一行中),然后在当前行中二分查找 key,跑完整个过程如果没找到就证明不存在 key。

代码:

bool Find(int key, vector<vector<int> > a) {
      int r = a.size();
      for(int i = 0;i < r;i++){
          int l = a[i].size();

          if(l == 0 ) return false;

          int left = a[i][0];
          int right = a[i][l - 1];
          if(key >= left && key <= right){
              int left2 = 0;
              int right2 = l-1;

              while(left2 <= right2){
                  int mid = (left2 + right2) / 2;
                  if(a[i][mid] < key){
                      left2 = mid + 1;
                  }else if(a[i][mid] > key){
                      right2 = mid - 1;
                  }else{
                      return true;
                  }
              }
          }
      }
          return false;
  }

注意:二维数组可能为空,比如这样的一个二维数组 { {},{},{} },行不为0,但是列为0,所以获取列数应当放在 for 循环里面,防止发生数组越界。

猜你喜欢

转载自blog.csdn.net/PZHU_CG_CSDN/article/details/81937882