LeetCode 74.Search a 2D Matrix Java

题目

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.

 

题意:给出一个m*n的矩阵,其中矩阵的特点为:(1)每一行从小到大有序排列 (2)每一行的第一位数都比前一行的数大,要求写出一个在矩阵中判定某元素是否存在的算法。因为这个矩阵具有的特点,我们可以把这个矩阵直接看成一个一维数组newArray,长度为m*n, 其中newArray[x]可以对应到矩阵的matrix[x/列数][x%列数]。然后直接对newArray使用二分查找即可。需要注意的是,当矩阵为空时,需要直接返回false。

 

代码:

public class Solution {

	public boolean searchMatrix(int[][] matrix, int target) {
		if(matrix.length==0){
			return false;
		}
        int col=matrix[0].length;	//数组列数
        int row=matrix.length;	//数组行数
        
        int[] newArray=new int[row*col];	//将二维数组放到一个一维素中,newArray[i]对应二维数组中的matrix[i/n][i%n]
        
        return binarySearch(matrix,newArray,target);
    }
	
	public boolean binarySearch(int[][] matrix,int[] newArray,int target) {
		int length=newArray.length;
		int col=matrix[0].length;	//数组列数
		int low=0;
		int high=length-1;
		while(low<=high){
			int mid=(low+high)/2;
			if(matrix[mid/col][mid%col]<target){
				low=mid+1;
			}else if(matrix[mid/col][mid%col]>target){
				high=mid-1;
			}else{
				//System.out.println("find: "+target);
				return true;
			}
		}
		//System.out.println("not find: "+target);
		return false;
	}
}

  

转载于:https://www.cnblogs.com/271934Liao/p/6897359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值