【LeetCode-74】Search a 2D Matrix

本文介绍了一种使用两次二分查找解决矩阵中查找特定元素的方法。该方法首先判断目标值是否在矩阵范围内,接着通过二分查找定位到可能包含目标值的行,最后在同一行内再次使用二分查找确定目标值是否存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题思想很简单,用两次二分查找就好了,做起来还是有点让人头疼的,总是这越界那越界的,不过最后还是终于搞定了

public static boolean searchMatrix(int[][] matrix, int target) {
		if(target < matrix[0][0] || target > matrix[matrix.length - 1][matrix[0].length - 1]){
			return false;
		}
		
		//求的是index
		int index = 0;
		//如果第一列最后一个数小于target,则直接搜索最后一行
		if(matrix[matrix.length - 1][0] <= target){
			index = matrix.length - 1;
			return find(matrix,target,index);
		}
		
		//否则,搜索第一列,找到最后一个比target小的数的index
		else{
			int begin = 0,end = matrix.length - 1;
			while(begin <= end){
				int mid = begin + (end - begin) / 2;
				if(matrix[mid][0] > target){
					end = mid - 1;
				}
				else if(matrix[mid][0] < target){
					begin = mid + 1;
				}
				else{
					return true;
				}
			}
			index = begin - 1;
			
			if(matrix[0].length == 1){
				return false;
			}
			
			else{
				return find(matrix,target,index);
			} 
		}
    } 
	
	private static boolean find(int[][] matrix, int target,int index){
		int left = 0,right = matrix[0].length - 1;
		while(left <= right){
			int mid = left + (right - left) / 2;
			if(matrix[index][mid] < target){
				left = mid + 1;
			}
			else if(matrix[index][mid] > target){
				right = mid - 1;
			}
			else{
				return true;
			}
		}
		return false;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值