文章目录
题目
升序数组 b,长度为 m , 含参数个数为 m 个。
升序数组 a, 长度为 n+m , 含参数个数为 n 个,且这 n 个数正好位于 a[0]至a[n-1]中。
比如
b [2,4,6]
a [1,3,5,7,null,null,null]
合并后得到 a [1,2,3,4,5,6,7]
关键字
升序、数组、合并
分析
a,b 都是升序,且b合到a。
a 空闲的空间长度等于b的长度。
将b依次从a的非空元素向前比较,需要交换就做交换处理。
代码
public static void main(String[] args) {
Integer[] b = {2, 4, 6};
Integer[] a = {1, 3, 5, 7, null, null, null};
if (Objects.isNull(b) || Objects.isNull(a)) {
return;
}
if (b.length == 0 || a.length == 0) {
return;
}
int aNoNullIndex = a.length - b.length - 1;
for (int i = b.length - 1; i >= 0; i--) {
int temABeginIndex = aNoNullIndex;
//交换逻辑
while (temABeginIndex >= 0) {
if (b[i] >= a[temABeginIndex]) {
a[temABeginIndex + 1] = b[i];
temABeginIndex--;
break;
} else {
a[temABeginIndex + 1] = a[temABeginIndex];
a[temABeginIndex] = b[i];
}
temABeginIndex--;
}
aNoNullIndex++;
}
System.out.println(Arrays.toString(a));
}
引申
如果是链表,处理方法类似。当然,如果需要保持 a、b 不变,可以参考 合并两个有序链表(升序)