主要是记录给自己看,保持一定的输出,同时自我监督,望坚持!
1 二维数组的查找
- 知识点:查找、数组
- 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1.1 我的思路:简单遍历暴力查找
public class Solution {
public boolean Find(int target, int [][] array) {
// ***改进处:插入无效条件判断***
byte flag = 0;
for(int i = 0;i < array.length;i++){
for(int j = 0;j < array[i].length;j++){
if(array[i][j] == target){
flag = 1;
break;
}
}
if(flag == 1){
break;
}
}
// ***注意处:这段不能提到for循环里,否则第一层找不到就会跳出***
if(flag == 1){
return true;
}else{
return false;
}
}
}
分析
- 思路缺点:效率低,题目信息利用不够充分
- 代码缺点:没有无效条件判断,故在改进处插入
//二维数组为空情况:
//1、数组首地址为空:array = {}
//2、array = {}:array.length == 0
//3、array ={
{}}:array.length == 1,array[0].length == 0
if(array==null||array.length==0||array[0].length==0) return false;
更优思路1:二分查找
因为数组从左到右递增,从上到下递增,故可从数组左下角开始二分查找。小于该值则上移,大于则右移,也可从右上角开始。