查找有序二维数组中是否包含特定值
来源:互联网 发布:excel数据透视表命名 编辑:程序博客网 时间:2024/05/17 22:18
需求:
给定一个整型二维数组,每一行是递增顺序,每一列是递增顺序,查找其中是否包含某个指定数值
分析:
1、根据二维数组大小分布情况可知,二维数组的右下角是最大值,左上角是最小值,左下角和右上角是中间值,并且数的增长方向是单一的,可以将左下角或者右上角作为比较标准。如果目标值比左下角小,那么一定在最左边列中,如果比左下角大,那么一定在右边的列中,列数减少。如果目标值比右上角小,那么一定在左边的列中,如果比右上角大,那么一定在最右边列中,行数增加。
2、类似于二分法的思想,和中间值比较,右上角是第一行和最后一列的中间值,左下角是第一列和最后一行的中间值。以左下角或者右上角为初始比较对象,如果和目标值相同就返回true,如果不相同,行数和列数做相应的增加或减少。
3、要保证查找顺序是单向的:
对于以右上角为参考值来说,遍历方向是←或↓,没有上和右。如果目标值比参考值大,那么向下遍历,如果目标值比参考值小,那么向左遍历;
对于以左下角为参考值来说,遍历方向是→或↑,没有下和左。如果目标值比参考值大,就向右遍历,如果目标值比参考值小,那么向上遍历。
代码:
import java.util.*;class FindNum{//给定一个整型二维数组,判断是否包含某目标值public static boolean containsNum(int[][] arr, int target){//判断该数组是否是有效的数组if(arr == null || arr.length == 0){return false;}//求该数组的行和列int row = arr.length, col = arr[0].length;//以右上角为初始参考值/*int i = 0, j = col-1;while(i < row && j >= 0){if(arr[i][j] == target){return true;}else if(arr[i][j] < target){i++;//如果目标值比当前值大,那么行数增加}else{j--;//如果目标值比当前值小,那么列数减少}}*///以左下角为初始参考值int i = row-1, j = 0;while(i >= 0 && j < col){if(arr[i][j] == target){return true;}else if(arr[i][j] < target){j++;}else{i--;}}return false;}public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("请输入数组的行数:");int row = scan.nextInt();System.out.println("请输入数组的列数:");int col = scan.nextInt();//创建一个新的整型二维数组int[][] arr = new int[row][col];//循环键入该数组for(int i = 0; i < row; i++){System.out.println("请输入第"+(i+1)+"行数据");for(int j = 0; j < col; j++){arr[i][j] = scan.nextInt();}}System.out.println("请输入目标值:");int target = scan.nextInt();System.out.println("数组是否包含目标值:"+containsNum(arr, target));}}
阅读全文
0 0
- 查找有序二维数组中是否包含特定值
- 查找字符串数组中是否包含某些特定字符串
- 二维有序数组中查找
- 有序二维数组中查找
- 二维有序数组中查找
- (java)二维有序数组中查找元素
- 有序二维数组中查找指定元素
- 二维有序数组查找
- 二维有序数组查找
- 二维有序数组查找
- 高效地判断数组中是否包含某特定值
- java高效 的判断数组中是否包含特定值
- 有序二维数组中搜索特定的数
- 在数组(序列、有序集合)中查找特定数组
- 二维有序数组查找某值
- 二维有序数组查找给定值
- 在查找有序二维数组中查找元素
- 【剑指offer】【二维数组中的查找】【有序二维数组整数查找】【判断二维数组是否为空方法】
- [LeetCode] 617.Merge Two Binary Trees
- Android Studio根据Json自动生成JavaBean
- 工程项目CPU白卡写入数据信息。
- 20171207
- Dateutil
- 查找有序二维数组中是否包含特定值
- 关于Android studio3.0的坑之butterknife 8.4.0
- LruCache缓存类源码解析
- HTTP和https的区别
- 多线程
- sql 行转列、分组、排序,
- crontab 每10秒执行一次
- matlab对图像进行重命名
- 按之字形顺序打印二叉树