二维数组中的查找
来源:互联网 发布:深圳方维网络 编辑:程序博客网 时间:2024/05/21 22:36
我的代码:
public class Solution { public boolean Find(int target, int [][] array) { boolean rtn=false; if(array==null||array.length==0||(array.length==1&&array[0].length==0)) return false;//target = {{}}的情况 for(int i=0;i<array.length;i++){ if(array[i][0]<=target){ if(erfen(array,target,i)){ rtn=true; break; } } else break; } return rtn; } public boolean erfen(int s[][],int taget,int i){ int max=s[i].length-1; int min=0; while(max>=min){ int mid = (max+min)/2; if(taget >s[i][mid]){ min = mid+1; } else if(taget <s[i][mid]){ max = mid - 1; } else return true; } return false; }}
大牛代码
/*两种思路一种是:把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,时间复杂度是nlogn*/public class Solution { 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; }} /*另外一种思路是:利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素a[row][col]与target进行比较,当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col--;当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;*/public class Solution { public boolean Find(int [][] array,int target) { int row=0; int col=array[0].length-1; while(row<=array.length-1&&col>=0){ if(target==array[row][col]) return true; else if(target>array[row][col]) row++; else col--; } return false; }}
差距巨大。。
阅读全文
1 0
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- EasyDarwin支持GB28181协议开发
- 二分查找的越界和死循环问题
- Kafka设计解析(四)- Kafka Consumer设计解析
- Dijkstra 算法 c语言原生实现
- 圣杯布局、双飞翼布局、Flex布局和绝对定位布局的几种经典布局的具体实现示例
- 二维数组中的查找
- pandas-Series 笔记
- PV操作--demo test
- 心跳协议的设计与实现
- Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
- 对服务器与客户端编码不同的解决方式2
- Linux查找含有某字符串的所有文件
- LeetCode Teemo Attacking
- Spring MVC Controller 入参类型