【剑指OFFER】二维数组中的查找
2019-09-17 10:25:36来源:博客园 阅读 ()
【剑指OFFER】二维数组中的查找
【题目描述】
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
时间限制:1秒 空间限制:32768K
【AC代码】
一、暴力法 时间复杂度:O(mn)
从首元素array[0][0]开始每行逐列顺序查找。
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int row = array.length, column = array[0].length; //Java中A[ ][ ]二维数组的A.length与A[i].length的区别:①A.length求该二维数组的行数;②A[i].length求该二维数组第i行的列数。 4 for (int i = 0; i < row; i++) { 5 for (int j = 0; j < column; j++){ 6 if (array[i][j] == target) return true; 7 } 8 } 9 return false; 10 } 11 }View Code
二、二分查找法 时间复杂度:mlog(n)
从首行开始每行按列数折半查找。
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int row = array.length, column = array[0].length; 4 for (int i = 0; i < row; i++) { 5 int left = 0, right = column - 1; 6 while (left <= right) { 7 int mid = (right - left) / 2 + left; //避免当left+right的和过大所导致的数据溢出 8 if (array[i][mid] > target) right = mid - 1; 9 else if (array[i][mid] < target) left = mid + 1; 10 else return true; 11 } 12 } 13 return false; 14 } 15 }View Code
原文链接:https://www.cnblogs.com/moongazer/p/11504548.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 终于拿到了美团offer了,没有辜负了这三个月的努力啊 2020-06-06
- 腾讯2020年Java实习生面试,15天后已拿offer,激动! 2020-06-05
- 最新四面京东拿offer回来分享面试经验总结(技术三面+HR面) 2020-06-04
- 历时两个月,他终于如愿拿到阿里offer了!恭喜恭喜 2020-06-02
- 想拿offer?请先过了下面这些Java技术问题. 2020-05-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash