数组是最简单的一种数据结构,它占据一块连续的内存,并按照顺序存储数据,创建数组时,我们需要首先指定数组的容量大小,然后根据大小分配内存。
由于数组中的内存是连续的,于是可以根据下标在O(1)时间读/写任何元素。因此它的时间效率是很高的。
我们可以感觉数组时间效率高的优点,用数组来实现简单的哈希表,把数组的下标设为哈希表的键值key,而把数组中每一个元素设为哈希表的value,这样每一个下标及数组中该下标对应的数字就组成了一个键值-值的配对。
有了这样的哈希表,我们就可以在O(1)实现查找,从而可以快速高效地解决很多问题。
题目如下图所示:
剑指offer面试题3
举一个数组的例子:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
需要寻找的目标元素是7。
思路分析:首先选取数组中右上角的数字,如果该数字等于要查找的数字,查找过程结束。
如果该数字大于要查找的数字,剔除这个数字所在的列。
如果该数字小于要查找的数字,剔除这个数字所在的行。
实现代码:
package test;
public class test01 {
public static void main(String[] args) {
int[][] a={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int target=20;
System.out.println(Find(target,a));
}
//实现算法
public static boolean Find(int target, int [][] array) {
int rows=array.length;
int cols=array[0].length;
boolean result=false;
if(rows>0&&cols>0&&array!=null){
int row=0;
int col=cols-1;
while(row<rows&&col>=0){
if(array[row][col]==target){
result=true;
break;
}else if (array[row][col]>target) {
--col;
}else{
++row;
}
}
}
return result;
}
}