admin 管理员组文章数量: 887021
2023年12月19日发(作者:个人主页模板怎么使用)
java算法笔试题
Java算法笔试题
一、问题描述
小明是一家互联网公司的面试官,他经常给应聘者出各种Java算法题。今天,小明又向应聘者出了新题目:已知两个有序数组arr1和arr2,请编写一个函数,将两个数组合并为一个有序数组。
二、样例输入输出
样例输入:
arr1 = [1,2,3,4,5]
arr2 = [2,3,4,5,6]
样例输出:
mergedArr = [1,2,2,3,3,4,4,5,5,6]
三、思路分析
解决这个问题有多种思路,下面从以下两种思路进行分析。
1. 暴力枚举法:分别取两个数组每个元素,比较大小后放入新数组,时间复杂度O(n^2)。
2. 双指针法:由于两个数组已经有序,可以使用两个指针,分别指向两个数组中的第一个元素,然后比较两个指针所指元素的大小,将较小的元素加入新数组。时间复杂度O(n)。
四、代码实现
1. 暴力枚举法
```
public static int[] merge(int[] arr1, int[] arr2) {
int[] mergedArr = new int[ + ];
int len = ;
int i = 0, j = 0, k = 0;
while (i < && j < ) {
if (arr1[i] <= arr2[j]) {
mergedArr[k] = arr1[i];
i++;
} else {
mergedArr[k] = arr2[j];
j++;
}
k++;
}
while (i < ) {
mergedArr[k] = arr1[i];
i++;
k++;
}
while (j < ) {
mergedArr[k] = arr2[j];
j++;
k++;
}
return mergedArr;
}
```
2. 双指针法
```
public static int[] merge(int[] arr1, int[] arr2) {
int[] mergedArr = new int[ + ];
int len = ;
int i = 0, j = 0, k = 0;
while (i < && j < ) {
if (arr1[i] <= arr2[j]) {
mergedArr[k] = arr1[i];
i++;
} else {
mergedArr[k] = arr2[j];
j++;
}
k++;
}
while (i < ) {
mergedArr[k] = arr1[i];
i++;
k++;
}
while (j < ) {
mergedArr[k] = arr2[j];
j++;
k++;
}
return mergedArr;
}
```
五、总结
本文对于两个有序数组的合并问题进行了分析,提供了暴力枚举法和双指针法两种思路,并给出了对应的Java代码实现。在实际应用中,双指针法因为时间复杂度更低,更为实用。
版权声明:本文标题:java算法笔试题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702938964h436692.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论