剑指Offer每日一刷 -2017年11月10日
来源:互联网 发布:windows已遇到关键问题 编辑:程序博客网 时间:2024/06/05 21:52
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二维数组的行数:array.length;
二维数组的列数:array[0].length;
两种思路:
思路一:把每一行看成一个有序的递增数组,对每一行进行二分查找。
注:
二分查找:二分查找是一个基础的算法。二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。
算法要求:必须采用按照关键字进行顺序存储。
public class BinarySearch { public boolean Find(int [][] array,int target) { for(int i=0;i<array.length;i++){ int low=0; int high=array[i].length-1; while(low<=high){ int mid=(low+high)/2; if(target>array[i][mid]) low=mid+1; else if(target<array[i][mid]) high=mid-1; else return true; } } return false; }}
另外一个思路是:
利用题目中二维数组的性质:
由上到下,由左到右递增的规律,选取右上角或者左下角的元素array[0][col-1]或array[row-1][0],
右上角时:当target小于array[row][col]时,那么target必定在该行,且在该元素的左边,col--;
当target大于array[row][col]时,那么target元素在该行下面的某行中,row++.
public boolean Find(int target,int[][] array){int row = 0;int col = array[0].length-1;while(row < array.length && col >=0){if(target == array[row][col]){return true;}else if(target > array[row][col]){row++;}else{col--;}}return false;}
左下角时:当target 大于array[row][col]时,那么target必定在该行,且在该元素的右边,col++;
当target小于arry[row][col]时,那么target在该行的上面,row--;
实现思路与上同,程序略。
阅读全文
0 0
- 剑指Offer每日一刷 -2017年11月10日
- 剑指offer每日一刷-2017年11月24日(补2017年11月23日)
- 剑指Offer每日一刷 -2017年11月11日
- 剑指offer每日一刷-2017年11月12日
- 剑指offer每日一刷-2017年11月13日
- 剑指offer每日一刷-2017年11月14日
- 剑指offer每日一刷-2017年11月15日
- 剑指offer每日一刷-2017年11月16日
- 剑指offer每日一刷-2017年11月17日
- 剑指offer每日一刷-2017年11月19日
- 剑指offer每日一刷-2017年11月20日
- 剑指offer每日一刷-2017年11月21日
- 剑指offer每日一刷-2017年11月22日
- 剑指offer每日一刷-2017年11月24日
- 剑指offer每日一刷2017年12月5日
- 每日一练10月26日
- 剑指offer每日一刷
- IDEA每日提醒2017年11月3日
- JS-11/10_HTML DOM Style 对象
- 八.ARM裸机学习之S5PV210的时钟系统2(汇编代码及时钟框图深入理解)
- 数据库-SQL基础
- Centos配置nodejs环境
- python 基本数据类型
- 剑指Offer每日一刷 -2017年11月10日
- int 数值翻转 ,例如将 123 转化成321
- Traditional Saliency Reloaded: A Good Old Model in New Shape
- DeviceIoControl获取文件LCN
- 第十九天总结
- sublime的安装以及简单的配置
- 神经网络
- 字串核对(c/python)
- SpringMVC使用iReport生成pdf