leetcode search a 2d matrix

this algorithm just use two times of binary search, first in the col direction, to choose a fit row.

then use binary search in the definitely row, then we can get the answer.

class Solution {
public:
    bool searchMatrix(vector<vector<int> > &matrix, int target) {
    if(matrix.empty())
    	return false;
   	int m = matrix.size();
   	int n = matrix[0].size();
   	int rowstart = 0;
   	int colstart = 0;
   	int rowend = m-1;
   	int colend = n-1;
   	int midrow = 0;
   	int midcol = 0;
   	while(rowstart <= rowend)
   	{
    	midrow = (rowend+rowstart)/2;
    	if(target < matrix[midrow][0])
    		rowend = midrow-1;
    	if(target > matrix[midrow][colend])
    		rowstart = midrow+1;
    	if(target > matrix[midrow][0] && target < matrix[midrow][colend])
    		break;
   		if(target == matrix[midrow][0] || target == matrix[midrow][colend])
   			return true;    
    }
    while(colstart <= colend)
    {
    	int midcol = (colstart+colend)/2;
    	if(target > matrix[midrow][midcol])
    		colstart = midcol+1;
    	if(target < matrix[midrow][midcol])
    		colend = midcol-1;
    	if(target == matrix[midrow][midcol])
    		return true;
    }
    return false;
   	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值