剑指offer之面试题3:二维数组中的查找
来源:互联网 发布:the ludlows 知乎 编辑:程序博客网 时间:2024/06/02 09:00
题 目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
由于二维数组元素的值是有规律的,从左到右(从上到下)是按照值递增的顺序排列的,故不应该对整个数组进行盲目(双层循环解决)搜索查找。在查找所查找的值number是否存在于二维数组,我们从“右上角” 开始向“左下角” 方向扫描查找,先将查找的起始行定位于第一行(row=0),将查找的起始列定位于最后一列(col = cols -1),然后比较当前元素值与number的大小关系:
若number == 当前元素值a[row][col],查找成功,并记录下当前元素的行列下标;
若number >当前元素值a[row][col],则排除该数所在的列,向则向左(值减小的方向)扫描,col--;
若number < 当前元素值a[row][col],则排除该数所在的行,向则向下(值增大的方向)扫描,row++。
同样,在查找的时候同样可以从“左下角” 开始 “右上角” 方向扫描查找,先将查找的起始行定位于最后一行(row=rows-1),将查找的起始列定位于第一列(col = 0),然后比较当前元素值与number的大小关系:
若number == 当前元素值a[row][col],查找成功,并记录下当前元素的行列下标;
若number >当前元素值a[row][col],则排除该数所在的行,向则向上(值减小的方向)扫描,row--;
若number <当前元素值a[row][col],则排除该数所在的列,向则向右(值增大的方向)扫描,col++。
代码如下:
import java.util.Scanner;public class FindNumberInArray {public static int r;public static int c;public static int R = 4;public static int C = 5;//private static int[][] Array = new int[R][C];//test arrayprivate static int[][] Array = new int[][] { {1,2,3,5,6},{7,8,9,11,17},{18,24,36,38,39},{45,47,48,59,100}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);//输入数组/*for(int i=0;i<R;i++){for(int j=0;j<C;j++){Array[i][j] = sc.nextInt();}}*/int number = sc.nextInt();boolean find = FindNumber(Array, R, C, number);if(find){System.out.println("The number is "+ number +".\nArray["+ r +"]["+ c + "] is the right location!");}else{System.out.println("Not Find!");}}public static boolean FindNumber(int[][] a,int rows,int cols,int number ){boolean find = false;if(a!=null && rows >0 && cols >= 0){int row = 0; //定位到第一行int col = cols -1; //定位到最后一列while (row < rows && col >= 0) {if(a[row][col] == number){find = true; //找到当前值,退出循环r = row; //保存当前行位置c = col; //保存当前列位置break;}else if(a[row][col] > number){col--; //当前列的值较大,则向左(值减小的方向)扫描,col--;}else{row++; //当前行的值较小,则向下(值增大的方向)扫描,row++;}}}return find;}}
输入:
24
输出结果:
The number is 24.
Array[2][1] is the right location!
输入:
46
输出结果:
46
Not Find!
- 剑指offer面试题3之二维数组中的查找
- 剑指offer之面试题3:二维数组中的查找
- 剑指Offer之面试题3:二维数组中的查找
- 剑指Offer之面试题3:二维数组中的查找
- 《剑指Offer》面试题三之二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 《剑指Offer》面试题3:二维数组中的查找
- 剑指offer面试题3-二维数组中的查找
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
- 二维数组中的查找(剑指offer面试题3)
- 【剑指offer】 面试题3: 二维数组中的查找
- 剑指Offer面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 剑指offer-面试题3:二维数组中的查找
- 剑指offer面试题3—二维数组中的查找
- 剑指offer 面试题3 二维数组中的查找
- {题解}[jzoj4799]【NOIP2016提高A组模拟9.24】我的快乐时代
- Js 日期转换在IOS失败(混合应用常用)
- Target runtime Apache Tomcat v7.0 is not defined.
- 微信入门开发
- request.getAttribute()、request.getParameter()
- 剑指offer之面试题3:二维数组中的查找
- Android应用内 代码截屏(获取View快照)和 禁止截屏
- OpenLayers 3实践与原理探究3-ol3一个完整的例子
- axis和xfire以及CXF三种方式实现WebServices分别有什么优缺
- java的特性与原则
- C# Stream 和 byte[] 之间的转换
- OpenLayers 3实践与原理探究4.1-ol3源码分析-底层基础
- Android 通过 Intent 传递类对象
- 机器学习(二) - - 假设空间