【笔记】二维数组中的查找
来源:互联网 发布:ubuntu格式化硬盘 编辑:程序博客网 时间:2024/06/07 23:38
题目要求:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
为了解题思路清晰,先创建一个二维数组。 array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第一种方法是把每一行看成是一个递增的数组,用二分法的思想判断当前值和target的值,进行比较。代码如下:
public class Solution { public boolean Find(int target, int [][] array) { 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]){ high=mid-1; }else if(target>array[i][mid]){ low=mid+1; }else{ return true; } } } return false; }}
以数组的形式进行循环,在每个数组里进行二分,判断mid值和target的值。
第二种方法是把二维数组看成矩阵形式的,选择右上角或左下角的元素。这里以右上角元素为例:
public class Solution { public boolean Find(int target, int [][] array) { int row=0; int col=array[0].length-1; while(row<=array.length-1&&col>=0){ if(target<array[row][col]){ col--; }else if(target>array[row][col]){ row++; }else{ return true; } } return false; }}
右上角元素定义为array[row][col],然后进行循环,如果target值小于array[row][col],就缩减列数col;如果target值大于array[row][col],就在当前行数基础上加1,循环直至target值等于array[row][col],否则跳出循环返回false。同理左下角元素。
两种方法都可以实现题中所述的算法,但从时间复杂度的角度上看,第二种方法较为简单。
仅为个人学习笔记,不喜勿喷。
阅读全文
0 0
- 笔记 二维数组中的查找
- 【笔记】二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- rdb存储引擎
- MONGODB的压力测试
- 移动硬盘无法访问位置不可用,里面的资料怎样找到
- 分解90=2*3*3*5*1
- oracle之 获取建表ddl语句
- 【笔记】二维数组中的查找
- mongodb复制集的实现
- Java 线程间通讯库 Disruptor
- 用线性回归进行糖尿病预测
- swagger
- 转载的动态表白程序
- Spring MVC基础
- 《数字技术》连载16: 第2章 数字器件 第11节 JK 触发器
- linux 中如何将两个iso合成一个