题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解答
提示:利用边界来减少重叠
注意:提高程序鲁棒性
从左下找:
public class Solution {
public boolean Find(int target, int [][] array) {
boolean result = false;
if ((array.length!=0)&&(array[0].length!=0)){
int rowsLength = array.length;
int columnsLength = array[0].length;
int rows = rowsLength - 1;
int columns = 0;
while ((rows >= 0)&&(columns<columnsLength)){
if (array[rows][columns]<target){
columns++;
}else if (array[rows][columns]>target){
rows--;
}else {
result = true;
break;
}
}
}
return result;
}
}
相关知识点——数组
数组的特点
- 访问时间效率高
- 如需拓展,使用array list
数组的操作
创建数组
操作 | 描述 |
---|---|
声明 | int[] a orint a[] |
初始化 | int[] a = new int [size] ,size为常数或变量,创建后不能改变大小。初始值:数字数组为0,boolean数组为false,对象数组为null |
赋初始值 | int[] a = {1, 2, 3} |
匿名数组 | new int[0] ,长度为0的数组(返回用);new int[] {1, 2, 3} ,用不创建新变量的方法重新初始化一个数组 |
基础操作
操作 | 描述 |
---|---|
长度 | a.length |
访问 | 1、下标,a[1] ;2、增强for循环,遍历全部,for (variable : collection) statement (不能用来赋值) |
打印 | 1、for循环;2、Array.toString(arrayName) (输出为:[1,2,3]) |
拷贝 | a.copyOf(b) |
设置为相同元素 | fill |
排序 | sort |
二分查找 | binarySearch(type[] a, type v) |
参考资料:
《剑指Offer》