zoukankan      html  css  js  c++  java
  • [LintCode] 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.

    4/23/2017

    算法班

    corner case想的不够全面,第23-28行是后来加上去的,原因是如果target在最后一行或者比任何一个值都大,我们是需要在end那一行找答案的。其他所有情况都是在start那一行找。

     1 public class Solution {
     2     /**
     3      * @param matrix, a list of lists of integers
     4      * @param target, an integer
     5      * @return a boolean, indicate whether matrix contains target
     6      */
     7     public boolean searchMatrix(int[][] matrix, int target) {
     8         // write your code here
     9         
    10         if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false;
    11         boolean ret;
    12         int start = 0, end = matrix.length - 1;
    13         
    14         while (start + 1 < end) {
    15             int mid = start + (end - start) / 2;
    16             if (matrix[mid][0] == target) return true;
    17             if (matrix[mid][0] < target) {
    18                 start = mid;
    19             } else {
    20                 end = mid;
    21             }
    22         }
    23         int row;
    24         if (matrix[end][0] < target) {
    25             row = end;
    26         } else {
    27             row = start;
    28         }
    29         int left = 0, right = matrix[row].length - 1;
    30         while (left + 1 < right) {
    31             int mid = left + (right - left) / 2;
    32             if (matrix[row][mid] == target) return true;
    33             if (matrix[row][mid] < target) {
    34                 left = mid;
    35             } else {
    36                 right = mid;
    37             }
    38         }
    39         if (matrix[row][right] == target || matrix[row][left] == target) return true;
    40         return false;
    41     }
    42 }
  • 相关阅读:
    Redis-Sentinel 哨兵
    virtualenv and virtualenvwrapper
    C/C++中extern关键字详解
    C++ 中文拼音排序方法。
    vector排序
    VS2013 Ctrl+Shift+F 没反应
    PostMessage 解析
    CTextUI 文本控件 显示数字方法
    SetTimer API函数
    CEditUI 控件使用
  • 原文地址:https://www.cnblogs.com/panini/p/6755064.html
Copyright © 2011-2022 走看看