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代码实现。在实际应用中,双指针法因为时间复杂度更低,更为实用。


本文标签: 数组 有序 样例