• 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;
    	}
    }
    

      

  • 相关阅读:
    JQuery常用动画实现函数
    DOM对象和JQuery对象进行转换
    JQuery中的mouseover和mouseenter的区别
    JQuery使用和选择器
    LintCode 11 二叉查找树的搜索区间
    Java IO整理
    JS基础知识——缓动动画
    JS——无缝滚动
    Java GC系列(1):Java垃圾回收简介
    深入理解Java之线程池
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6897359.html
Copyright © 2020-2023  润新知