zoukankan      html  css  js  c++  java
  • [leetcode] Add to List 74. Search a 2D Matrix

    /**
     * Created by lvhao on 2017/8/1.
     *
     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.
     */
    /*
    * 思路是先找到target所在的行,然后在这一行找有没有,找寻的方式都是二分查找*/
    public class Q74Searcha2DMatrix {
        public boolean searchMatrix(int[][] matrix, int target) {
            if (matrix.length == 0 || matrix[0].length == 0)
                return false;
            int sta = 0;
            int fin = matrix.length,mid=0;
            boolean res = false;
            //二分法查找行
            while(sta < fin)
            {
                mid = (sta + fin)/2;
                if (matrix[mid][0] <= target)
                {
                    //如果这一行开头小于等于target且下一行开头大于它(或这一行就是最后一行)
                    if ((mid + 1) >= matrix.length || matrix[mid+1][0] > target)
                        break;
                    else
                        sta++;
                }
                else
                {
                    fin--;
                }
            }
            int row = mid;
            sta = 0;
            fin = matrix[0].length;
            //二分法查找数据
            while (sta < fin)
            {
                mid = (sta + fin)/2;
                if (matrix[row][mid] == target)
                {
                    res = true;
                    break;
                }
                else if (matrix[row][mid] > target)
                {
                    fin--;
                }
                else
                {
                    sta++;
                }
            }
            return res;
        }
    }
  • 相关阅读:
    python yield 理解
    创建loop设备
    git 添加submodule 以及更名
    用了linux 这么久,终于发现一个需要硬连接的地方
    gdb 查看内存
    att 汇编 helloworld
    ln 创建连接和mount -bind用法
    区间DP
    数位DP
    VS反汇编分析
  • 原文地址:https://www.cnblogs.com/stAr-1/p/7269514.html
Copyright © 2011-2022 走看看