码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 74.Search a 2D Matrix Java

时间:2017-05-24 09:55:09      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:boolean   system   follow   java   chm   二维数组   bin   二分查找   长度   

题目

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

标签:boolean   system   follow   java   chm   二维数组   bin   二分查找   长度   

原文地址:http://www.cnblogs.com/271934Liao/p/6897359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!