LeetCode 74.Search a 2D Matrix Java

Posted BrookLearnData

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
	}
}

  

以上是关于LeetCode 74.Search a 2D Matrix Java的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 74 Search a 2D Matrix ----- java

LeetCode 74.Search a 2D Matrix Java

19.2.13 [LeetCode 74] Search a 2D Matrix

[LeetCode] 74. Search a 2D Matrix 搜索一个二维矩阵

leetCode 74.Search a 2D Matrix(搜索二维矩阵) 解题思路和方法

LeetCode 74 Search a 2D Matrix(搜索2D矩阵)