1.
结论:
先生成 一维数组
然后一维数组的每个元素生成属于自己的数组
最后形成二维数组
1. 为什么说 数组查询快呢?
不是说数组查询快,而是根
据下标(内存寻址公式)可
以
快速定位到
目标元素在
堆的位置(知道房间号找人
和不知道房间号找人的区别
),时间复杂度是 O(1),map 也是 O(1) 和n没关系
为了保持数据的连续性
,
在数组中插
入或删除一个数据时
,
需要做大量的数据搬移工作
。
因此
,
在数组中进行插入和删除操作的时间复杂度比
较高
,
是
0(
n)
1. 二维数组的定义和里面元素的遍历
/**
* 定义并遍历二维数组
*/
@Test
public void two() {
//int arr[][] = new int[3][];
// 定义二维数组长度
int[][] arr = new int[3][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
// 往数组插入内容
arr[0][0] = 00;
arr[1][0] = 10;
arr[1][1] = 11;
arr[2][0] = 20;
arr[2][1] = 21;
arr[2][2] = 22;
// 3
System.out.println(arr.length);
System.out.println(arr.length);
System.out.println("遍历二维数组结果如下......");
for (int i = 0;i < arr.length; ++i) {
System.out.println("下标为"+i+"对应的一维数组 元素如下");
// 取出二维数组 每个元素(另外一个数组)
for( int j = 0;j < arr[i].length; ++j ){
System.out.print(arr[i][j]);
System.out.println(",");
}
}
}
结果如下:
1. 应用: 多个长度相同或者不同的一维数组(就可以用二维数组来解决)
/**
* 功能描述
*
* 合并n个有序数组::
* 如果是n个⻓度⼀样的数组合并成⼀个(TODO 多个数组可以联想到 二维数组,多个长度一样的数组 联想到二维数组 里 数组的 length 一样)
*
* 三种基本的思路,⼀种是先将数组全部拼接到⼀个数组中,然后再排序。第⼆种⽅式是不断进⾏两两
* 要有序合并,第三种⽅式是使⽤堆排序。第⼆种⽅式不断两两合并就是归并的思想,我们到学习归并排序时再看这
* 个问题。第三种我们在学习完堆之后再详细解释。这⾥只看第⼀种,新建⼀个N*L的数组,将原始数组拼接存放在
* 这个⼤数组中,再调⽤Arrays.sort()进⾏排序
*
* @author guoyiguang
* @date 2023/2/8
* @param
* @return
*/
@Test
public void mergeSameArrays(){
int n = 2;
int[][] array = new int[n][];
int[] arrayOne = new int[] { 1,2};
array[0] = arrayOne;
int[] arrayTwo = new int[] { 3,4};
array[1] = arrayTwo;
// 思路: 先将数组全部拼接到⼀个数组中,然后再排序
// 遍历二维数组,将二维数组的元素 都扔到一个 一维数组里,最后 对新的一维数组进行排序
int[] newArray = new int[2*n];
int newArrayIndex = 0;
for(int a = 0;a<=array.length-1;a++){
int[] ints = array[a];
for(int b = 0;b<=ints.length-1;b++){
newArray[newArrayIndex] = ints[b];
// 新一维数组下标增加 1
newArrayIndex++;
}
}
//排序⼀下
Arrays.sort(newArray);
System.out.println(newArray);
System.out.println(newArray);
}