题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路1:先使用二分法定位 筛选掉不可能的区间,再使用二分法分行查询每一个一维数组

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

解题思路2:根据二维数组的有序性,从第一行开始比较最后一位数和目标值的大小,如果目标值小叫筛选掉这一列(列索引减一)

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

最新文章

  1. 30分钟学会如何使用Shiro
  2. NSPredicate
  3. 基于Chromium构建Chrome WebBrowser for .net 控件(还有点心得体会)
  4. php抽象类的简单应用
  5. TYVJ P1098 任务安排 Label:倒推dp 不懂
  6. 数组机、局域网ip查找
  7. 《JavaScript权威指南》读书笔记(四)
  8. bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
  9. 关于路由、AP、交换机的小总结
  10. Linq101-Aggregate
  11. matlab图像处理
  12. WindowsService服务的C#实现
  13. sass教程
  14. Maven本地
  15. js的各种错误类型
  16. Redis【第二篇】集群搭建
  17. 初探nginx负载均衡集群
  18. 第二次作业:APP案例分析
  19. 201621123057 《Java程序设计》第4周学习总结
  20. 打开ubantu报错(invalid environment block. Press any key to continue)

热门文章

  1. JavaScript中的appendChild()方法
  2. ping外网
  3. dctcp-ns2-patch
  4. IIS 7 启用 gzip 静态压缩 压缩js和css文件
  5. QT的组件布局
  6. Go语言(三)反射机制
  7. 基于SAP Kyma的订单编排增强介绍
  8. Dz7.2 从获取uc key到getshell
  9. 在一个Excel单元格内输入多行内容
  10. thuwc2018 爆炸记