zoukankan      html  css  js  c++  java
  • Leetcode-Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

    • Integers in each row are sorted from left to right.
    • The first integer of each row is greater than the last integer of the previous row.

    For example,

    Consider the following matrix:

    [
      [1,   3,  5,  7],
      [10, 11, 16, 20],
      [23, 30, 34, 50]
    ]
    

    Given target = 3, return true.

    写得蛮啰嗦,简而言之就是先搜索列号,再在搜索到的列里面去搜索该元素,全部用的二分查找(反正它已经排序了)

     1         public boolean searchMatrix(int[][] matrix, int target) {
     2             if(matrix==null||matrix.length <=0){
     3                 return false;
     4             }
     5             int targetRow =0;
     6             int m = matrix.length;
     7             int n = matrix[0].length;
     8             
     9             //make sure target is in the range
    10             if(target < matrix[0][0] || target > matrix[m-1][n-1]){
    11                 return false;
    12             }else{
    13                 targetRow = searchRow(matrix,target,0,m-1);
    14                 if(targetRow == -1){
    15                     return false;
    16                 }
    17                 return searchElement(matrix,target,targetRow,0,n-1);
    18             }
    19             
    20         }
    21         public int searchRow(int[][] matrix,int target,int start,int end){
    22             while(start <= end){
    23                 int mid = (end-start)/2 +start;
    24                 if(matrix[mid][0] == target){
    25                     return mid;
    26                 }
    27                 if(matrix[mid][0] < target){
    28                     if(matrix[mid][matrix[0].length -1] >= target){
    29                         return mid;
    30                     }else{
    31                         start  = mid +1;
    32                         continue;
    33                     }
    34                 }
    35                 if(matrix[mid][0] > target){
    36                     end = mid-1;
    37                     continue;
    38                 }
    39                 
    40             }
    41             return -1;
    42         }
    43         
    44         public boolean searchElement(int [][] matrix,int target,int row,int start,int end){
    45             while(start <= end){
    46               int mid = (end-start)/2 + start;  
    47               if( matrix[row][mid] == target){
    48                  return true;
    49               }
    50               if(matrix[row][mid] < target){
    51                   start = mid+1;
    52                   continue;
    53               }
    54               if(matrix[row][mid] > target){
    55                   end  = mid - 1;
    56                   continue;
    57               }
    58             }
    59             return false;
    60         }
  • 相关阅读:
    不应滥用named let
    PAT甲级——A1106 Lowest Price in Supply Chain
    PAT甲级——A1105 Spiral Matrix【25】
    PAT甲级——A1104 Sum of Number Segments
    PAT甲级——A1103 Integer Factorization
    PAT甲级——A1102 Invert a Binary Tree
    PAT甲级——A1101 Quick Sort
    PAT甲级——A1100 Mars Numbers
    PAT甲级——A1099 Build A Binary Search Tree
    PAT甲级——A1098 Insertion or Heap Sort
  • 原文地址:https://www.cnblogs.com/dijkstra-c/p/3957660.html
Copyright © 2011-2022 走看看