剑指Offer-二维数组查找
2018-09-10 01:03:53来源:博客园 阅读 ()
/**
* 题目描述 :
* 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,
* 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,
* 判断数组中是否含有该整数。
* Created by guo.chen on 2018/9/8.
*/
public class Solution {
/**
* 先使用二分法定位 筛选掉不可能的区间,
* 再使用二分法分行查询每一个一维数组
* @param target 目标值
* @param array 二维数组
*/
public static boolean findTarget(int target, int [][] array) {
if(array.length==0){
return false;
}
int rows = array.length;
int cols = array[0].length;
if(target<array[0][0] || target>array[rows-1][cols-1]){
return false;
}
//先确定在哪一行
int middle = 0, low = 0, high = rows-1;
while (high>low){
middle = (low + high) / 2;
if(array[middle][0] > target)
high = middle - 1;
else if(array[middle][0] < target)
low = middle + 1;
else
return true;
}
for(int x=0;x<high;x++){
while (array[x][cols-1]<target)
x++;
low = 0;
high = cols -1;
while (high>=low){
middle = (low + high)/2;
if(array[x][middle] > target)
high = middle - 1;
else if(array[x][middle] < target)
low = middle + 1;
else
return true;
}
}
return false;
}
/**
* 根据二维数组的有序性,
* 从第一行开始比较最后一位数和目标值的大小,
* 如果目标值小叫筛选掉这一列(列索引减一)
* @param target 目标值
* @param array 二维数组
*/
public static String findTarget2(int target, int[][] array){
if(array.length==0 || array[0].length == 0){
return "-1";
}
int rows = array.length;
int cols = array[0].length;
if(target<array[0][0] || target>array[rows-1][cols-1]){
return "-1";
}
int x = 0, y = cols - 1;
while (x<rows && y>=0){
if(array[x][y] == target)
return "坐标是:["+x+" ]["+y+"]";
else if(array[x][y] > target)
y--;
else
x++;
}
return "-1";
}
public static void main(String[] args){
int [][] array = {{16,26,36,46,56,66,76,86},
{17,27,37,47,57,67,77,87},
{18,28,38,48,58,68,78,88},
{19,29,39,49,59,69,79,89}};
boolean flag = findTarget(68,array);
System.out.println(flag);
int [][] array2 = {{}};
String index = findTarget2(58,array2);
System.out.println(index);
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 三面网易,四面阿里,五年开发经验程序员剑指大厂,稳拿offe 2020-05-22
- 剑指Offer_编程题_对称的二叉树 2020-05-22
- 剑指No1 2020-05-14
- 剑指Offer_编程题_复杂链表的复制 2020-05-11
- LeetCode 面试题04. 二维数组中的查找 2020-05-02
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