算法刷题笔记-二维数组中的查找

301 阅读1分钟

参考:B站UP--子烁爱学习(推荐大家观看原视频)

  • 题目描述:


  • 题目解析:


    • 举例:如图所示的从左到右,从上到下递增的二维数组

    • 解题思路

      • 这样的二维数组是左上角最小,右下角最大,处于右上角的元素是数组的分界点(拐点),若目标值比右上角元素,那么其肯定在右上角元素的下面部分,若比之,则在其左半边部分

      • 若想找到目标元素,那么就得将目标元素和拐点元素比较,确定目标值在哪个部分,一步一步缩小查找范围,直到找到该值。

    • 代码展示

      public class Algorithm01 {
          public boolean findOne(int target,int [][] arr){
              //找出拐点元素arr[a][b]
              int lines = arr.length;
              int cols = arr[0].length;
      
              int a=0;
              int b=cols-1;
      	//在二维数组中依据拐点元素循环查找
              while(a<lines && b>=0){
                  if (target == arr[a][b]){
                      return true;
                  }else if (target > arr[a][b]){
                      a++;
                  }else{
                      b--;
                  }
      
              }
              return false;
          }
      }