剑指Offer-二维数组查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路1:先使用二分法定位 筛选掉不可能的区间,再使用二分法分行查询每一个一维数组
public static boolean findTarget(int target, int [][] array) {
if(array.length==0){
return false;
}
int rows = array.length;
int cols = array[0].length;
if(target<array[0][0] || target>array[rows-1][cols-1]){
return false;
}
//先确定在哪一行
int middle = 0, low = 0, high = rows-1;
while (high>low){
middle = (low + high) / 2;
if(array[middle][0] > target)
high = middle - 1;
else if(array[middle][0] < target)
low = middle + 1;
else
return true;
}
for(int x=0;x<high;x++){
while (array[x][cols-1]<target)
x++;
low = 0;
high = cols -1;
while (high>=low){
middle = (low + high)/2;
if(array[x][middle] > target)
high = middle - 1;
else if(array[x][middle] < target)
low = middle + 1;
else
return true;
}
}
return false;
}
解题思路2:根据二维数组的有序性,从第一行开始比较最后一位数和目标值的大小,如果目标值小叫筛选掉这一列(列索引减一)
public static String findTarget2(int target, int[][] array){
if(array.length==0 || array[0].length == 0){
return "-1";
}
int rows = array.length;
int cols = array[0].length;
if(target<array[0][0] || target>array[rows-1][cols-1]){
return "-1";
}
int x = 0, y = cols - 1;
while (x<rows && y>=0){
if(array[x][y] == target)
return "坐标是:["+x+" ]["+y+"]";
else if(array[x][y] > target)
y--;
else
x++;
}
return "-1";
}
剑指Offer-二维数组查找的更多相关文章
- 剑指Offer 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...
- 牛客网剑指offer 二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题思路 该题有很多种 ...
- 剑指Offer——二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析: 因为二维数组 ...
- 剑指offer—二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer —— 二维数组的查找
1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.思路:只看题目本身 ...
- (java)剑指offer二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从 上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. pu ...
- 牛客网-剑指Offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 用js刷剑指offer(二维数组中的查找)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指Offer_4_二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 面试题5-[剑指offer] 二维数组中的查找
题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
随机推荐
- python SQLAchemy多外键关联
关联同一张表的两个字段 Customer表有2个字段都关联了Address表 创建表结构 orm_many_fk.py 只创建表结构 from sqlalchemy import Integer, F ...
- arcgis silverlight api 图层介绍
Layer |--TiledMapServiceLayer | |--ArcGISTiledMapServiceLayer |--DynamicLayer | |--DynamicMapService ...
- 【Leetcode】【Medium】Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- 【解决方法】jdb2/sdb1-8 io使用过高
机器上面跑的mysql,使用的ssd告诉硬盘,但是 使用iotop发现这个进程 jdb2/sdb1-8 使用率高达80%多, 后来发现是因为参数 sync_binlog=1 导致,事务写入太频繁,改为 ...
- Memory Leak Detection in Embedded Systems
One of the problems with developing embedded systems is the detection of memory leaks; I've found th ...
- 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.5.调优实战
高性能硬件上的程序部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存. -- 缺点:GC停顿时间长 使用若干个32位虚拟机建立逻辑集群来利用硬件资源. -- 思 ...
- Go语言(三)反射机制
package main import( "fmt" "reflect" ) func main(){ // iterate through the attri ...
- docker初使用(主要记录命令)
启动服务 docker run -it -p : steveny/predictionio: /bin/bash 开始所有服务 pio-start-all 查看有那些服务 jps -l $ docke ...
- mongodb常用基础命令
查看当前使用的数据库,也可以直接用dbdb.getName() 显示当前db状态db.stats() 当前db版本 db.version() 查看当前db的链接机器地址db.getMongo() 查看 ...
- Struts2.3.4.1 + Spring3.1.2 + Hibernate4.1.6整合
1. Jar包 2. web.xml配置 3. struts.xml配置 4. hibernate.cfg.xml配置 5. applicationContext.xml配置 6. log4j.pro ...