Search a 2D Matrix
2015-09-22 15:12
274 查看
题意:
给定一个矩阵,每行的元素从左到右一次增大,每一行的首元素大于上一行最末尾的元素;在这样的矩阵中查找value
分析:
1)、首先可以在最后一列进行二分查找,如果第mid行的最后一个元素大于value,而第一个元素小于value,则说明要查找的元素只可能在mid行,然后再慈航进行二分查找
2)如果第mid行的最后一个元素大于value,第一个元素也大于value,说明value在mid行之前的几行,则right--;
3)如果第mid行的最后一个元素小于value,说明value在mid行之后的几行,则left++;
给定一个矩阵,每行的元素从左到右一次增大,每一行的首元素大于上一行最末尾的元素;在这样的矩阵中查找value
分析:
1)、首先可以在最后一列进行二分查找,如果第mid行的最后一个元素大于value,而第一个元素小于value,则说明要查找的元素只可能在mid行,然后再慈航进行二分查找
2)如果第mid行的最后一个元素大于value,第一个元素也大于value,说明value在mid行之前的几行,则right--;
3)如果第mid行的最后一个元素小于value,说明value在mid行之后的几行,则left++;
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { int rows = matrix.length; if(rows <= 0){ return false; } int cols = matrix[0].length; int left = 0; int right = rows - 1; while(left <= right){ int mid = (left + right) / 2; int tmp1 = matrix[mid][cols - 1]; int tmp2 = matrix[mid][0]; if(tmp1 == target || target == tmp2){ return true; } if(tmp1 > target && tmp2 < target){ return searchMatrix(matrix[mid], target); } else if(tmp2 > target){ right--; } else if(tmp1 < target){ left++; } } return false; } public boolean searchMatrix(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--; } else{ left++; } } return false; } }
相关文章推荐
- Java总结篇系列:类型转换/造型
- 通过ValueAnimator 来实现按钮点击后倒计时的效果
- Jquery,seaJs异步刷新,克隆
- 疯狂讲解之GCD线程
- LeetCode 94: Binary Tree Inorder Traversal
- noip2008 笨小猴 (模拟)
- YARN内存使用优化配置
- 一道有意思的逻辑题
- 解决svn Authorization failed错误
- 找色
- C基础09天--指针+1
- 安装Oracle 11g R2静默安装安装
- 多线程锁的一点测试
- my.ini优化mysql数据库性能的十个参数(推荐)
- 各类文件头特征码
- Android手势密码
- 升级Xcode7+后遇到的问题
- 2015年9月21号css第一次课
- JavaScript继承方式详解
- [转] What is Ec/Io (and Eb/No)?