zoukankan      html  css  js  c++  java
  • [leetcode]Search a 2D Matrix

    简单题。二分查找的应用。犯得错误是检查了数组下界0却忘了检查上界length。

    public class Solution {
        public boolean searchMatrix(int[][] matrix, int target) {
            // Start typing your Java solution below
            // DO NOT write main() function
            
            int m = matrix.length;
            if (m == 0) return false;
        	int n = matrix[0].length;
        	if (n == 0) return false;
    
        	if (target < matrix[0][0]) return false;
        	if (target > matrix[m-1][n-1]) return false;
        	
        	int left = 0; 
        	int right = m - 1;
        	while (left <= right) {
        		int mid = (left + right) / 2;
        		if (matrix[mid][0] == target) return true;
        		
        		if (matrix[mid][0] > target) {
        			right = mid - 1;
        		} else {
        			left = mid + 1;
        		}
        	}
        	
        	// at this time right < left
        	if (left < m && target > matrix[left][0]) {
        		return searchLine(matrix[left], target);
        	}
        	else if (right >= 0 && target > matrix[right][0]) {
        		return searchLine(matrix[right], target);
        	}
        	
        	return false;
        }  
        
        public boolean searchLine(int a[], int target)
        {
        	int left = 0; 
        	int right = a.length - 1;
        	while (left <= right) {
        		int mid = (left + right) / 2;
        		if (a[mid] == target) return true;
        		
        		if (a[mid] > target) {
        			right = mid - 1;
        		} else {
        			left = mid + 1;
        		}
        	}
        	return false;
        }
    }
    

      

  • 相关阅读:
    多态问题----针对方法
    画了个Android——Canvas类的使用(转)
    设计模式之策略模式
    Listview多种布局的使用
    Activity的退出和進入效果
    java.lang.ClassNotFoundException
    台球小游戏
    线性表
    堆栈
    动态内存管理
  • 原文地址:https://www.cnblogs.com/lautsie/p/3239123.html
Copyright © 2011-2022 走看看