二维数组中的查找(java版)
来源:互联网 发布:云计算的一级产业链 编辑:程序博客网 时间:2024/05/16 19:24
1.问题描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2.算法分析
二维数组特点:每一行都是递增有序,每一列都是递增有序。
根据二维数组的特点,查找一个待定元素target,首先与array[i][j]比较。结果分以下三种情况:
(1)target == array[i][j],返回true
(2)target > array[i][j]。此时,target在array[i][j]的右下部分区域
(3)target < array[i][j]。此时,target在array[i][j]的左上部分区域
综上,由于行和列的方法都可变,查找的区域较大。那么,有没有一种方式可以减少待查元素变化的范围,将其按照行和列变化转化为只按照行变化或者只按照列变化。因此,可以采用降维的方式来处理该问题。
3.算法设计
首先,定义可用变量:
int[][] array : array数组,表示待查找集合
int colLength :列的长度
int rowLength:行的长度
int row : 表示行下标,取值范围(0-array.length-1)。初值为array.length-1
int col : 表示列下标,取值范围(0-array[0].length-1)。初值为0
比较过程:target与array[row][col]比较。结果分为以下三种情况:
(1)target == array[row][col],返回true
(2)target > array[row][col]。此时,target在array[row][col+1]到array[row][colLength-1]之间
(3)target < array[row][col]。此时,查找上一行元素
此时,降维了。选取的待比较元素从行最大列最小开始,那么当target大于array[i][j]时,可以沿着列的方向继续比较。
4.代码实现
public boolean find(int[][] array, int target){int rowLength = array.length;int colLength = array[0].length;int row = rowLength -1;int i=0;while(row>=0 && i< colLength){if(array[row][i] > target){row--;}else if(array[row][i]<target){i++;}else {return true;}}return false;}
- 二维数组中的查找(Java版)
- 二维数组中的查找(java版)
- 二维数组中的查找(java版)
- 二维数组中的查找(Java)
- 二维数组中的查找(java实现)
- [Java]二维数组中的查找
- 二维数组中的查找(数组 查找)
- 【剑指offer-Java版】03二维数组中的查找
- 剑指offer-----二维数组中的查找(java版)
- JAVA实现二维数组中的查找(《剑指offer》)
- JAVA实现二维数组中的查找(《剑指offer》)
- 剑指offer——二维数组中的查找(JAVA)
- 剑指offer--二维数组中的查找 java
- 剑指offer:二维数组中的查找(java)
- [剑指Offer]二维数组中的查找[java]
- 二维数组中的查找java实现
- 二维数组中的查找
- 二维数组中的查找
- OpenCV Tutorial: 邊緣介紹
- iOS开发中最有用关键的代码合集
- hadoop1.2.1单机试玩-安装部署
- 图像卷积与滤波的一些知识点
- 《大型网站技术架构》读书笔记三:大型网站核心架构要素
- 二维数组中的查找(java版)
- Memory Networks 资料
- sqoop mysql数据导入Hive中
- ORACLE11gR2安装XDB
- iOS TouchID
- linux ubuntu切换用户
- 2016年中国大学生程序设计竞赛(杭州) A ArcSoft's Office Rearrangement(贪心)
- java中关于数据精度问题
- 冒泡排序