目录
前言
本文用于记录剑指Offer第一题。
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
第壹节
1、1 解法一:二分法。
/*
由题意可知,该数组是一个矩形。且每一行都是从左到右递增,
因此我们通过for循环将每一行作为一个单独的数组进行二分法查询?
*/
public boolean solution(int target,int arrary[][]){
boolean answer = false;
//定义横长度,和列长度
int row = arrary[0].length;
int cow = arrary.length;
for (int i = 0 ; i <arrary.length ; i++){
//定义左右两边
int left = 0 ;
int right = row-1;
int mid;
//定义二分法循环体
while(left <= right){
mid = (left+right)/2;
if(target==arrary[i][mid]){
answer=true;
}
//如果不等于
if(target<arrary[i][mid]){
right=mid-1;
}else{
left=mid+1;
}
}
}
return answer;
}
1、2 解法二:for循环
最粗糙的解题方案:通过for循环进行每一个元素的比较。
public boolean solution(int target,int arrary[][]){
boolean flag = false;
for(int i = 0 ; i < arrary.length ; i++){
for(int j = 0 ; j < arrary[i].length ; j++){
if(target==arrary[i][j]){
flag=true;
}
}
}
return flag;
}
结语
该题是关于二维数组的查询,二分法解题只是其中的一个思路,还有其他解决方案。本题主要的解题方案是根据题意,数组每一行都从左至右增大,因此使用二分法!