题解 | #二维数组中的查找#

二维数组中的查找

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

看到有序+查找就想到二分,不过此题涉及二维查找,用线性搜索最快

方法一:暴力搜索,嵌套循环

  • 时间复杂度O(M*N)
    public class Solution {
      public boolean Find(int target, int [][] array) {
          for(int i=0;i<array.length;i++){
              for(int j=0;j<array[i].length;j++){
                  if(array[i][j]==target)
                      return true;
              }
          }
          return false;
      }
    }

    方法二:二分查找

  • 时间复杂度O(M*log(N))
    public class Solution {
      public boolean Find(int target, int [][] array) {
          for(int i=0;i<array.length;i++){
              if(biSearch(target,array[i])==target)
                  return true;
          }
          return false;
      }
      private int biSearch(int target,int [] array){
          int start=0,end=array.length-1;
          while(start<=end){
              int mid = start + (end-start)/2;
              if(array[mid]>target){
                  end = mid-1;
              }else if(array[mid]<target){
                  start = mid+1;
              }else{
                  return array[mid];
              }
          }
          return -1;
      }
    }

    方法三:线性搜索

  • 只能以左下角或者右上角为起点,否则无法根据大小选择下一步方向
  • 时间复杂度O(M+N)
    public class Solution {
      public boolean Find(int target, int [][] array) {
          int i=array.length-1,j=0;
          while(i>-1&&j<array[i].length){
              if(array[i][j]==target)return true;//先判断,再移动ij
              if(array[i][j]>target){
                  i--;
              }else if(array[i][j]<target){
                  j++;
              }
          }
          return false;
      }
    }
全部评论

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务