小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
这算是一个在面试的时候遇上的实战题,面试的是一个网易的测试外包,但是面试的是网易的人员;当时给了我这一道实战题,当初没能想出来,所以写不出来,如今算是做一个回顾
题目
给定两个有序数组,请将他们合并成一个有序数组
思路
- 抛开其他条件来说,两个数组合并,然后重新排序
- 首先,两个数组合并成一个数组
- 其次重新排序
- 额外条件,因为整合的两个数组是有序的,数组之间是已经排好序的,所以这个算是对整个提纲代码的优化
编码
- 编码的逻辑优化
- 定义一个数组,长度为两个数组的长度之和
- 定义双指针,分别指向两个数组的起点
- 循环新数组,判断情况
- 如果当前指针在数组A、数组B范围内的,那么再度比较两个数组的值的大小并填充。
- 如果指针超出数组A、或者数组B的话,那么只需要对还在范围内的数组进行直接填充即刻。
public static int[] mergeArray(int[] a,int[] b){
int[] c = new int[a.length+b.length];
int d = 0;
int e = 0;
for (int i = 0; i < c.length; i++) {
if (d<a.length && e<b.length){
if (a[d]>b[e]){
c[i] = b[e];
e++;
}else {
c[i] = a[d];
d++;
}
}else if (d<a.length){
//当arr b已经遍历完后
c[i] = a[d];
d++;
}else if (e<b.length){
//当arr a已经遍历完
c[i] = b[e];
e++;
}
}
return c;
}
学无止境,刷题也只要熟能生巧,才能达到应付自如。